如何使用Zend_Form_Element_Hash?

Val*_*lev 3 zend-framework csrf

然后我试图使用Zend_Form_Element_Hash它每个请求重新生成一个哈希.

在我的代码中:

 // form
 $this->addElement('hash', 'hihacker', array('salt' => 'thesal'));
Run Code Online (Sandbox Code Playgroud)

然后我转储$ _SESSION我看到每个页面重新加载的新值.

然后我发送一个表格,它报告错误"令牌'28a5e0e2a50a3d4afaa654468fd29420'与给定的令牌'a64407cc11376dac1916d2101de90d29'"不匹配,每一次 - 新的一对令牌

taw*_*kov 6

$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;
}
Run Code Online (Sandbox Code Playgroud)

它对我来说非常好,但请仔细检查你的会话设置

"在内部,元素使用Zend_Session_Namespace存储唯一标识符,并在提交时检查它(检查TTL是否已过期).然后使用'Identical'验证器确保提交的散列与存储的散列匹配.'formHidden' view helper用于在表单中呈现元素." 表单ZF文档