Zend_Form_Element_Hash
zend_formを使っておりCSRF対策として使えるようだったので
Zend_Form_Element_Hashを試しているのですが以下のようなエラーになります。
「The two given tokens do not match」
ちなみにソースはこんな感じです。
$this->setMethod('post');
$this->addElement('text', 'username', array(
'label' => 'ユーザ名:',
'required' => true,
'validators' => array(
'Alnum',
'NotEmpty',
)
));
$this->addElement('password', 'password', array(
'label' => 'パスワード:',
'required' => true,
'validators' => array(
'Alnum',
'NotEmpty',
array('StringLength', false, array(8)),
)
));
$this->addElement('submit', 'login', array(
'ignore' => true,
'label' => 'Submit',
));
$this->addElement('hash', 'csrf', array(
'ignore' => true,
));
ソースを確認したところhiddenに値は埋め込まれてありました。
エラーからすると一致しないとの事なので$request->getPost()を
参照してみましたが確かに全く違う値でした。
というか、ポストされエラーがなければ生成した乱数をセッションに
登録し確認画面でhiddenの値とセッションの値が一致すればOKという
のが普通ですよね?
しかし、セッションをvar_dumpしても乱数が登録されてる様子もなく
何と比較しているのか根本的なところが謎です。。。
echo $this->_form->getValue('csrf');
上記のようにしても乱数の取得ができずマニュアルを見ても解決策が
全くわからないのですがどのようにすればうまく動作するのでしょうか?