然后我尝试使用 Zend_Form_Element_Hash 它在每个请求中重新生成一个散列。
在我的代码中:
// form
$this->addElement('hash', 'hihacker', array('salt' => 'thesal'));
然后我转储 $_SESSION 我看到每个页面重新加载的新值。
然后我发送一个表单,它报告错误“ token ‘28a5e0e2a50a3d4afaa654468fd29420’与给定的 token ‘a64407cc11376dac1916d2101de90d29’不匹配”,每次都是新的 token 对
最佳答案
$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;
}
它对我来说效果很好,但请仔细检查您的 session 设置
" 在内部,该元素使用 Zend_Session_Namespace 存储一个唯一标识符,并在提交时检查它(检查 TTL 是否已过期)。然后使用“相同”验证器来确保提交的哈希与存储的哈希相匹配。 'formHidden' View 助手用于呈现表单中的元素。 “ form ZF docs
关于zend-framework - 如何使用 Zend_Form_Element_Hash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627732/