我在Login
中有yii
表格,需要username
和password
。我的问题是密码是纯文本,因此可能会导致安全问题。为此,我在通过ajax提交表单之前有md5
密码
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'enableAjaxValidation'=>true,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<div class="row">
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'password'); ?>
<?php echo $form->passwordField($model,'password'); ?>
<?php echo $form->error($model,'password'); ?>
<p class="hint">
Hint: You may login with <tt>demo/demo</tt>.
</p>
</div>
<div class="row rememberMe">
<?php echo $form->checkBox($model,'rememberMe'); ?>
<?php echo $form->label($model,'rememberMe'); ?>
<?php echo $form->error($model,'rememberMe'); ?>
</div>
<div class="row submit">
<?php echo CHtml::submitButton('Login',array('id'=>'submit')); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
<script>
$("#submit").click(function(){
var password = $("#LoginForm_password").val();
$.ajax({
type: 'POST',
url: '<?php echo Yii;;app()->createUrl("user/encrptpassword")?>',
data: {'password': password},
success:function(data){
$("#LoginForm_password").val(data);
}
});
</script>
public function actionEncrptpassword(){
echo md5($_POST['password']);
}
但这也不安全,因为ajax post数据在检查时也可见。
请在提交表单之前告诉我如何encrpt
我的密码
答案 0 :(得分:1)
使用SSL,这就是它的全部要点。 http://clouldflare.com为任何域提供免费的SSL。
答案 1 :(得分:0)
看看GPG。您生成一对密钥:公共密钥和私有密钥。
您使用公钥在客户端使用javascript加密用户密码:https://github.com/openpgpjs/openpgpjs
然后你应该使用你的私钥来解密服务器端的消息:http://php.net/manual/ru/book.gnupg.php
注意:客户端库依赖于用户的浏览器而且可能有问题。如果你可以控制它,请使用它。
为避免Replay attack,您可以使用随机令牌并将其存储在用户的会话中。您在登录表单上显示它,在客户端抓取它以进行散列,并在用户的会话中使用它在服务器端进行验证。这个和其他选项在维基页面上描述。