0

私の問題は、zend password要素にパスワードを入力すると箇条書き(暗号化された形式)で表示され、chromeまたはMozillaでパスワードがプレーンテキストで表示されることを確認すると、gmailパスワードテキストボックスのようなzend要素でパスワードを暗号化するにはどうすればよいですか?つまり、パスワードを入力してそのパスワードを調べると、パスワードがプレーンテキスト形式で表示されません。

zend形式の私のパスワード要素は次のとおりです。

$password = new Zend_Form_Element_Password('Password');

$password->setRequired(true)
        ->setAttrib('size', 30)
        ->setRenderPassword(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
    ->addValidator('StringLength',false,array('min' => 6,'max' => 50,                          

'messages' => array(
    Zend_Validate_StringLength::INVALID =>'Please Enter correct Password',
    Zend_Validate_StringLength::TOO_LONG =>'Password is too long',
    Zend_Validate_StringLength::TOO_SHORT =>'Password is too short')));;
    $password->class="textbox";
    $password->setDecorators($decorators);
    $password->setAttrib('Maxlength', 50);      
4

2 に答える 2

0

あなたのパスワード要素は、実際に必要以上に忙しいようです。

  • パスワードを見たり表示したりすることは決してありません。値が何であるかは気にしません。入力されたパスワードの値がデータベースの値にハッシュされることだけが重要です。

  • バリデーターの値を削除し'max'ます。パスワードが最小の長さである限り、パスワードの長さは気にしません (とにかくパスワードを特定の長さにハッシュします)。

  • メッセージを削除しINVALIDます。これは、パスワードを検証する場所ではありません (auth() 関数で発生します)。このバリデーターが行うのは、形式の検証だけです。

  • もう一度MaxLength属性を削除します。パスワードの長さは気にしません。ユーザーの気分が良くなる場合は、Moby Dick の最初の章を使用させてください。

  • パスワード要素で使用するフィルターには注意してください。フィルターを変更または削除すると、おそらくデータベース内のほとんどのパスワード ハッシュが壊れてしまうからです。また、これらのフィルターの実装が変更された場合、ハッシュも壊れる可能性があります。


    $password = new Zend_Form_Element_Password('Password');   
    $password->setRequired(true)
             ->setAttrib('size', 30)
             ->addFilter('HtmlEntities')
             ->addValidator('StringLength',false,array('min' => 6,                           
                'messages' => array(       
                    Zend_Validate_StringLength::TOO_SHORT =>'Password is too short'
              )));;
    $password->class="textbox";
    $password->setDecorators($decorators);

ここで、'Password' の値を取得してハッシュ関数にダンプし、保存するか比較します。

幸運を!

于 2012-09-27T13:54:25.520 に答える
0

I think that you have this problem because of the setRenderPassword(true) syntax. If you remove it, it will not have the password as plain text.

于 2012-09-26T11:57:21.843 に答える