Zend框架1.12 - 哈希表格验证返回错误

时间:2016-01-23 09:55:28

标签: php forms zend-framework

我正在使用Zend_Form_Element_Hash来保护我网站上的csrf。下面是我的Form.php中的代码

$token = new Zend_Form_Element_Hash('token', 'csrf');
$token->setSalt(md5(uniqid(rand(), TRUE)));
$token->initCsrfToken();
$token->initCsrfValidator();
$this->addElement($token);

当我在我的控制器中检查$ form-> isValid时,我总是得到以下错误

The two given tokens do not match

欢迎任何帮助!

1 个答案:

答案 0 :(得分:1)

  1. Csrf存储在会话中,csrf的会话名称依赖于salt。如果 salt是随机的,会话名称也是随机的。所以你无法得到 会话中的csrf将其与post中的csrf进行比较。做盐 这种形式不变。

  2. 不要调用initCsrfToken,此方法会重置csrf并被调用 自动渲染。

  3. 在元素创建上更好地传输盐

    $token = new Zend_Form_Element_Hash('token', 'csrf', array('salt' => 'secure'));
    $this->addElement($token);