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
とか出ちゃうのは何故だろうか。何か間違えてるかな。。