我正在开发一个应该非常安全的java web应用程序,所以我在SSL服务器上使用了支持CSRF的spring安全性和spring;我使用POST成功地提交了所有表单以及生成的CSRF令牌,但是有些页面有获取方法,如果任何攻击者从任何浏览器打开任何页面的源,他都可以在表单标记中看到生成的CSRF令牌,然后只要会话受到攻击,他就可以使用它将任何内容发布到我们的站点!我说的对吗?
我该怎么做才能保证网站的安全?我是否应该使用任何其他开源和spring安全性来覆盖其他攻击,如跨站点脚本,等等。?我应该强制所有页面使用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因此,我认为使用GET in spring安全性来处理csrf是安全的,除非攻击者使用XSS攻击来执行提交。
发布于 2017-09-24 21:52:19
攻击者可以看到自己的CSRF令牌,但看不到其他用户的CSRF令牌。不同的用户有不同的令牌,使用错误的令牌不应该有效。
所以这里没什么好担心的。别惊慌。
发布于 2017-09-24 07:53:07
但是,有些页面有GET方法,如果任何攻击者从任何浏览器打开任何页面的源代码,他都可以在表单标记中看到生成的CSRF令牌,那么只要受到攻击的用户激活会话,他就可以使用它将任何内容发布到我们的站点!!我说的对吗?
是的,你是对的,使用GET会使你的网站泄露敏感信息。这正是为什么弹簧安全和RFC规范不鼓励使用GET请求发送敏感信息的原因。如果您正在发送CSRF令牌,则应发帖。
我该怎么做才能保证网站的安全?我是否应该使用任何其他开源和spring安全性来覆盖其他攻击,如跨站点脚本,等等。?
Spring安全框架不是银弹。使用它不会神奇地使您的web应用程序100%安全。尽管它覆盖了大部分的安全漏洞,但我们必须确保以一种不引入任何安全漏洞的方式编写代码。
例如:
在跨站点脚本的情况下,即使您使用Security,如果您从一个HTML输入框中获取一个值并直接保存它,而不对其进行HTML编码,并将其显示在一个类似于${value}的JSP文件中,那么您将引入XSS的可能性。
https://stackoverflow.com/questions/46387428
复制相似问题