然后我试图使用Zend_Form_Element_Hash它每个请求重新生成一个哈希.
在我的代码中:
// form $this->addElement('hash', 'hihacker', array('salt' => 'thesal'));
然后我转储$ _SESSION我看到每个页面重新加载的新值.
然后我发送一个表格,它报告错误"令牌'28a5e0e2a50a3d4afaa654468fd29420'与给定的令牌'a64407cc11376dac1916d2101de90d29'"不匹配,每一次 - 新的一对令牌
$form = new Form(); $form->addElement('hash', 'hihacker', array('salt' => 'YOUR TOO MUCH SALTY TEXT !!@@')); if ($this->_request->isPost() && $form->isValid($this->_request->getPost())) { // Valid ! you are safe do what ever you want . } else if (count($form->getErrors('request_token')) > 0) { ///get him to the error controller $this->_forward('csrf-forbidden', 'error'); return; }
它对我来说非常好,但请仔细检查你的会话设置
"在内部,元素使用Zend_Session_Namespace存储唯一标识符,并在提交时检查它(检查TTL是否已过期).然后使用'Identical'验证器确保提交的散列与存储的散列匹配.'formHidden' view helper用于在表单中呈现元素." 表单ZF文档