2012-02-21 9 views
2

私は私のログインフォームZend CSRFハッシュコードチェックは自動的に処理されますか?

$csrf = $this->createElement('hash', 'csrf', array('salt' => 'unique')); 

そして、コントローラのアクションで私は

if (!$admin_login_form->isValid($_POST)) { 
    //Throw Error 
}else{ 
    // Redirect to index 
} 

今の質問は、Zendのハンドルのハッシュコードが自動的にそれをチェックしないされているか、我々は、手動で何かをコーディングしなければならないのに次のコードを追加しましたそれを確認するには?

答えて

5

答えはいいえです。ハッシュが有効かどうかを確認するために何もする必要はありません。

Zend_Form_Element_Hash要素を作成すると、自動的にフォームにバリデーター(Zend_Validate_Identicalを使用)が追加され、新しい名前空間セッションにハッシュが登録されます。

その後、isValid()メソッドを呼び出すと、ページがレンダリングされたときにセッションに格納されているCSRFが最後のリクエストで送信されたものと同じでない場合、同じバリデータが失敗し、エラーが返されます。

編集: また、あなたの要素に塩を追加することができますし、ハッシュは、以下の暗号化に応じて生成されます:md5(mt_rand(1,1000000) . $this->getSalt() . $this->getName() . mt_rand(1,1000000)

  1. クラス名
  2. 塩:

    は、ハッシュを格納するために使用される名前空間は、三つの基準によって定義されるので、二つの要素がどのセッションの競合は発生しません、あなたのコメントにあなたの2番目の質問に答えるために
  3. 例えば要素名

、あなたの要素はおそらく、この名前空間の下に格納されます:「Zend_Form_Element_Hash_unique_がありh "ここで、"一意 "は塩の値であり、要素名はハッシュです。

+0

ありがとうございます。また、「塩」という言葉は何ですか?そして、私が複数のフォームを持っているなら、このセッションは矛盾しますか? –

+0

英語は私の母国語ではないので、私は深い定義には出ませんが、私の意見では、塩は、安全性を高めるためにハッシュ/パスワードに連結できるランダムな文字列です。私は元の答えであなたの2番目の質問に答えます。 – Liyali

+0

もう一度ありがとう、それはあなたがzendフレームワークの健全な知識を持っているようです。 Zend初心者のための読書資料やチュートリアルはありますか?私は深く行きたい。もう一度ありがとうございます。 –

関連する問題