php - Zend CSRF 哈希代码检查是自动处理的吗?

标签 php zend-framework zend-form

我已将以下代码添加到我的登录表单

$csrf = $this->createElement('hash', 'csrf', array('salt' => 'unique'));

在 Controller 操作中我有

if (!$admin_login_form->isValid($_POST)) {
    //Throw Error
}else{
    // Redirect to index
}

现在的问题是 Zend 是否自动处理哈希代码检查,还是我们必须手动编写一些代码来验证它?

最佳答案

答案是否定的。您无需执行任何操作来检查哈希值是否有效。

当您创建 Zend_Form_Element_Hash 元素时,它会自动向您的表单添加一个验证器(使用 Zend_Validate_Identical)并将您的哈希注册到新的命名空间 session 中。

之后,一旦调用 isValid() 方法,如果页面渲染时 session 中存储的 CSRF 与上次请求中发送的不同,则相同验证器将失败并返回错误。

编辑: 此外,您可以向元素添加盐,并将根据以下加密生成哈希: md5(mt_rand(1,1000000) . $this->getSalt() . $this->getName() 。 mt_rand(1,1000000).

要回答评论中的第二个问题,两个元素不会导致任何 session 冲突,因为用于存储哈希的命名空间是由三个标准定义的:

  1. 类名
  2. 元素名称

例如,您的元素可能存储在以下命名空间下:“Zend_Form_Element_Hash_unique_ hash”,其中“unique”是盐值和元素名称的哈希值。

关于php - Zend CSRF 哈希代码检查是自动处理的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9375670/

相关文章:

php - 使用Android Studio将音频文件上传到服务器

Tomcat 上的 PHP 无法连接到 Java Servlet

php - 在循环中创建对象时检查内存使用情况?

php - 使用 Zend 框架从 PHP 服务器接收到 HttpResponse 400

python - 学习 Django 是否可以很好地转化为其他应用程序?

javascript - 如何在JavaScript中动态获取下拉值?

zend-framework - Zend_Validate_Db_RecordExists 与 Doctrine 2?

php - 将变量传递给 Zend Form

javascript - FullCalendar 时区不在客户端修改时间

php - Mysql查询不求和多条记录,只取第一条记录