Zend_Form_Element_Hash

Zend Framework: Documentation

Zend_Form_Element_Hashなんて便利なものがあったのね。
いわゆるCSRF対策に一意のハッシュを組み込んでおく、例のやつ。

この要素は CSRF 攻撃からフォームを保護するものです。 送信されたデータがもとのフォームのユーザセッションからのものである (悪意のあるスクリプトからのものではない) ことを保証できるようにします。 これを実現するために、フォームにハッシュ要素を追加して あとでそのハッシュを検証するようにしています。

ハッシュ要素の名前は一意なものでなければなりません。 この要素ではオプション salt を使うことを推奨します。 名前が同じでも salt が異なればハッシュは衝突しません。

$form->addElement(‘hash’, ‘no_csrf_foo’, array(‘salt’ => ‘unique’));

salt は、後から setSalt($salt) メソッドを使って設定することもできます。

内部的には、この要素は一意な ID を

Zend_Session_Namespace を用いて保存しており、 送信されたときにその内容 (TTL が期限切れになっていないかどうか) をチェックしています そして、’Identical’ バリデータを使用して、 送信されたハッシュと保存されているハッシュを比較します。

‘formHidden’ ビューヘルパーを使用して要素をフォームにレンダリングします。

Identicalバリデータでチェックしてるはずなんだけど、エラーメッセージが

Value is empty, but a non-empty value is required

とか出ちゃうのは何故だろうか。何か間違えてるかな。。