首页 > 解决方案 > 尝试实现 CSRFProtector 失败并且令牌未生成或相同

问题描述

我正在实施 OWASP 网站上引用的 CSRFProtector (mebjas CSRF-Protector-PHP)。

我按照这个库的说明进行操作。在所有 PHP 文件中,我都包含了该csrfprotector.php文件并调用了csrfProtector::init(). 对于 JavaScript,我csrfprotector.js在页面的 HTML 中包含了一次文件并调用

window.addEventListener("DOMContentLoaded", function() {
  csrfprotector_init();
}

当我提交表单时,我发现 csrfprotector 无法验证令牌是否相同。我已经修改了 CSRF 以打印出 SESSION 和 POST 变量,所以当我访问该页面时,PHP 通过 init() -> authorisePost() 回显了以下内容。

post: {"anticsrf":false, ...}
session: []
403 Access Forbidden by CSRFProtector!

我观察到使用开发人员工具时,我的 cookie 中没有添加任何 anticsrf 令牌。

因为我想知道为什么没有创建令牌,所以我修改了脚本以不运行 authorisePost 而是运行 refreshToken() 并且我每次都得到令牌,但它们是不同的。

post: {"anticsrf":"5ec0ae33dc", ...}
session: {"anticsrf":"cbf30a7d6b", ...}
403 Access Forbidden by CSRFProtector!

我观察到使用开发人员工具,Cookies 中的 anticsrf 令牌就是14dd3db17f这种情况。

我可以做些什么来解决我的问题来自哪里,或者我错过了什么?谢谢。

标签: javascriptphpcsrfcsrf-token

解决方案


推荐阅读