我在Grails 2.4.5应用程序中设计CSRF防御。
我想使用Synchronizer Tokens模式,这是我想要的设计,简化:
- 使用新会话,在服务器上生成一个长唯一的csrf令牌。
- 将csrf令牌存储在会话中。
- 将csrf标记添加到响应标头
- 在服务器上,对于每个可能会更改应用程序状态的传入请求(发布,更新,删除...),验证引用/来源与目标相同
- 在服务器上,对于每个可能会更改应用程序状态的传入请求(发布,更新,删除...),检查标头中csrf令牌的存在和有效性。
在grails应用程序中,我想象这发生在Spring Security过滤链中。
- 如果令牌不存在或不匹配,则返回错误并记录潜在的CSRF攻击,否则允许请求继续。
醇>
这听起来不错吗?
我担心的是,这还不够。正式地,同步器令牌被添加到每个表单以及每个帖子,放置或删除URL。然而,应用程序并没有使用表单标签,因此将它添加到应用程序中每个JavaScript生成的表单似乎是繁重的,更不用说需要进行大量测试以确保没有现有功能被破坏。
谢谢!