2016-11-25 3 views
0

Ich habe eine Login Form in yii, die username und password erfordert. Mein Problem ist, dass das Passwort ein einfacher Text ist, der Sicherheitsprobleme verursachen kann. Dazu habe ich md5 Passwort, bevor Form über AjaxWie verschlüsselt man das Passwort vor dem Post vom Login-Formular?

<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']); 

} 

Aber das ist auch nicht sicher, wie Ajax-Post-Daten bei der Prüfung der Vorlage auch sichtbar ist.

Bitte lassen Sie mich wissen, wie kann ich mein Passwort encrpt vor Form

+1

Die Implementierung von SSL löst dieses Problem. Ihr Ansatz ist eine Umgehungslösung. Aber du kannst die Implementierung von https://en.wikipedia.org/wiki/Public-key_cryptography in Betracht ziehen. Dort gibt es einige Bibliotheken für GPG für Javascript und PHP. – rNix

+0

@rNix Ich kann SSL jetzt wegen eines Problems nicht implementieren. Bitte lassen Sie mich wissen, wenn ich es ohne diese – user1234

+0

@ user1234 tun könnte, dann sollten Sie vielleicht daran arbeiten, dieses Problem zu lösen, stattdessen - die meisten Web-Server-Tutorials enthalten eine SSL-Sektion, Zertifikate sind jetzt frei, es ist bewährte Methode, Ihre Kommunikation zu sichern, Wie auch immer - was hältst du? –

Antwort

1

SSL verwenden einreichen, das ist der springende Punkt davon. http://clouldflare.com gibt gratis SSL für jede Domain.

0

Werfen Sie einen Blick auf GPG. Sie generieren ein Schlüsselpaar: öffentlich und privat.

  1. Mit öffentlichen Schlüssel des Benutzers Passwort mit Javascript-Client-Seite verschlüsseln: https://github.com/openpgpjs/openpgpjs

  2. Dann sollten Sie Ihren privaten Schlüssel verwenden Nachricht auf Server-Seite zu entschlüsseln: http://php.net/manual/ru/book.gnupg.php

Hinweis: Die clientseitige Bibliothek hängt vom Browser des Benutzers ab und kann fehlerhaft sein. Verwenden Sie es, wenn Sie dies steuern können.

Um Replay attack zu vermeiden, können Sie ein zufälliges Token verwenden und es in Benutzersitzung speichern. Sie zeigen es auf dem Login-Formular an, holen es für das Hashing auf der Client-Seite und verwenden es zur Überprüfung auf der Serverseite von der Sitzung des Benutzers. Diese und andere Optionen werden auf der Wiki-Seite beschrieben.

Verwandte Themen