PHP CSRF 表单令牌 + 验证建议

Posted

技术标签:

【中文标题】PHP CSRF 表单令牌 + 验证建议【英文标题】:PHP CSRF Form token + validation advice 【发布时间】:2011-09-25 20:58:50 【问题描述】:

我有一个提交表单,有 9 个字段,其中 6 个需要验证,包括一个包含文件大小和文件类型验证的上传字段。

生成一个随机令牌,以防止 CSRF 起作用,但是使用令牌时验证的正确方法是什么?

如果我在同一个文件中进行验证,则会在重新加载验证时重新生成令牌。 (可以防止这种情况吗?我已经尝试过isset(),但仍然会重新生成。)但是使用相同的文件会阻止用户的姓名和电子邮件被存储在会话中。

最好在单独的文件中进行验证,然后将每个错误的 URL 中的基本变量重定向回表单,即http://www.example.com/form?n=1

使用单独的文件也意味着将表单数据存储在会话中,因此如果重定向中存在错误,可以重新填充表单。

感谢您的任何帮助。

【问题讨论】:

我发现 this article by Chris 很好地解释了 CSRF 是什么以及如何保护自己免受它的侵害。 谢谢你,他比书中的内容略好。 这些文章可能对您有所帮助:> https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) > https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet md5(uniqid(rand(), TRUE)); 对于安全上下文不应该被信任。 ***.com/a/31683058/4357238 【参考方案1】:

根据经验,CodeIgntier 在 CSRF 中表现出色 implementation 以及其他安全措施。我建议您查看他们的代码以更好地了解整个过程。另见this。

【讨论】:

以上是关于PHP CSRF 表单令牌 + 验证建议的主要内容,如果未能解决你的问题,请参考以下文章

如何生成和验证 csrf 令牌

Zend Form - 一页中的多个表单和(CSRF)令牌验证

SPA 使用的经过身份验证的 Rest API:如何获取用于登录和注册表单的 CSRF 令牌?

快速 CSRF 令牌验证

查询如何存储和处理框架CSRF令牌

警告:无法验证 CSRF 令牌的真实性