【发布时间】:2020-10-16 22:13:23
【问题描述】:
几乎所有关于反 CSRF 机制的文档都指出 CSRF 令牌应该在服务器端生成。但是,我想知道是否有必要。
我想在这些步骤中实现anti-CSRF:
没有服务器端生成的 CSRF 令牌;
在浏览器端,在每次提交 AJAX 或表单时,我们的 JavaScript 都会生成一个随机字符串作为令牌。此令牌在实际 AJAX 或表单提交发生之前写入 cookie csrf;并且令牌作为 _csrf 添加到参数中。
在服务器端,每个请求都应该有 cookie csrf 和提交的参数 _csrf。比较这两个值。如果它们不同,则表示这是一次 CSRF 攻击。
服务器端不需要下发CSRF token,只做检查即可;并且令牌完全在浏览器端生成。当然,这只是针对反 CSRF 的。服务器端应该有验证过程来验证用户ID。
这听起来是 CSRF 的有效解决方案,但我不确定为什么没有关于这种方法的文档。
这个anti-CSRF机制有问题吗?
【问题讨论】:
标签: security web csrf csrf-protection