【发布时间】:2018-03-05 08:58:11
【问题描述】:
我正在开发一个应该非常安全的 Java Web 应用程序,因此我在 SSL 服务器上应用了 Spring Security 和 Spring MVC,并启用了 CSRF;我使用 POST 成功提交了所有表单以及生成的 CSRF 令牌,但是有些页面具有 GET 方法,如果任何攻击者从任何浏览器打开任何页面的源代码,他可以在 Form 标签内看到生成的 CSRF 令牌,那么他可以使用只要会话受到攻击的用户处于活动状态,它就可以将任何内容发布到我们的网站!我说的对吗?
我应该怎样做才能使网站非常安全?我应该使用任何其他开源以及 spring security 来覆盖其他攻击,如跨站点脚本等。我应该强制所有页面使用 POST 来避免任何 CSRF 攻击吗?
更新
我尝试通过客户端工具在同一会话下使用与登录用户相同的令牌提交请求来进行更多测试,但它失败了,响应说登录失败,并且标头包含 nosniff
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
所以我认为在 spring security 中使用 GET 来处理 csrf 是安全的,而不用害怕有人读取 GET 页面中的令牌,除非攻击者使用 XSS 攻击来进行提交
【问题讨论】:
标签: java spring security spring-security csrf