如何在登录表单发布前加密密码?

时间:2016-11-25 05:16:02

标签: php ajax forms yii

我在Login中有yii表格,需要usernamepassword。我的问题是密码是纯文本,因此可能会导致安全问题。为此,我在通过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我的密码

2 个答案:

答案 0 :(得分:1)

使用SSL,这就是它的全部要点。 http://clouldflare.com为任何域提供免费的SSL。

答案 1 :(得分:0)

看看GPG。您生成一对密钥:公共密钥和私有密钥。

  1. 您使用公钥在客户端使用javascript加密用户密码:https://github.com/openpgpjs/openpgpjs

  2. 然后你应该使用你的私钥来解密服务器端的消息:http://php.net/manual/ru/book.gnupg.php

  3. 注意:客户端库依赖于用户的浏览器而且可能有问题。如果你可以控制它,请使用它。

    为避免Replay attack,您可以使用随机令牌并将其存储在用户的会话中。您在登录表单上显示它,在客户端抓取它以进行散列,并在用户的会话中使用它在服务器端进行验证。这个和其他选项在维基页面上描述。