java - 当用户简单导航到我的 Web 应用程序中的任何页面时,为什么 OWASP CSRF-guard 会错误地检测到攻击?

标签 java csrf configuration owasp

我尝试在我的 Java Spring-MVC Web 应用程序中使用 OWASP 的 CSRFGuard,但它正在检测用户所做的任何操作的 CSRF 攻击。 Web 应用程序加载,一旦用户尝试导航到 Web 应用程序的任何部分,我就会在 org.owasp.csrfguard.action.Log.Message 中设置 CSRFguard.properties 文件报告“错误:请求中缺少所需的 token ”。即使 URL 确实包含 token (参见屏幕截图)?

OWASP CSRF-Guard false-positive issue

这是我的 Owasp.CsrfGuard.properties 文件:

org.owasp.csrfguard.Logger=org.owasp.csrfguard.log.ConsoleLogger
org.owasp.csrfguard.configuration.provider.factory = org.owasp.csrfguard.config.overlay.ConfigurationAutodetectProviderFactory
org.owasp.csrfguard.Enabled = true
org.owasp.csrfguard.ValidateWhenNoSessionExists = false
org.owasp.csrfguard.TokenPerPage=false
org.owasp.csrfguard.Rotate=false
org.owasp.csrfguard.Ajax=true
org.owasp.csrfguard.action.Log=org.owasp.csrfguard.action.Log
org.owasp.csrfguard.action.Log.Message=potential cross-site request forgery (CSRF) attack thwarted (user:%user%, ip:%remote_ip%, method:%request_method%, uri:%request_uri%, error:%exception_message%)
org.owasp.csrfguard.action.Redirect=org.owasp.csrfguard.action.Redirect
org.owasp.csrfguard.action.Redirect.Page=%servletContext%/error.jsp
org.owasp.csrfguard.unprotected.Css=*.css
org.owasp.csrfguard.unprotected.JavaScript=*.js
org.owasp.csrfguard.TokenName=csrfToken
org.owasp.csrfguard.SessionKey=csrfToken
org.owasp.csrfguard.TokenLength=32
org.owasp.csrfguard.PRNG=SHA1PRNG
org.owasp.csrfguard.PRNG.Provider=SUN
org.owasp.csrfguard.Config.Print = true
org.owasp.csrfguard.JavascriptServlet.sourceFile =  WEB-INF/csrfguard.js
org.owasp.csrfguard.JavascriptServlet.domainStrict = true
org.owasp.csrfguard.JavascriptServlet.cacheControl = private, maxage=28800
org.owasp.csrfguard.JavascriptServlet.injectIntoForms = true
org.owasp.csrfguard.JavascriptServlet.injectGetForms = true
org.owasp.csrfguard.JavascriptServlet.injectFormAttributes = true
org.owasp.csrfguard.JavascriptServlet.injectIntoAttributes = true 
org.owasp.csrfguard.configOverlay.secondsBetweenUpdateChecks = 60

最佳答案

当 token 未随 http 请求一起传递时,就会发生这种情况。我建议使用篡改数据来验证 token 是否随 http 请求一起发送。可能涉及到将请求定向到特定页面的 jsp 或 html,并且您需要在那里注入(inject) token 。 如果您已经尝试过动态 javascript 注入(inject),那么您可以尝试 JSP 标签库注入(inject),因为有时动态 javascript 注入(inject)不起作用。

csrfguard 3.1.0 example

csrfguard token injection

关于java - 当用户简单导航到我的 Web 应用程序中的任何页面时,为什么 OWASP CSRF-guard 会错误地检测到攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30539077/

相关文章:

java - Java中的多维数组扩展了哪个类?

java - ZapOfDingBats 字体在输出 pdf 上不正确可见

security - 如何扩展或覆盖 BeginForm 以包含 AntiForgeryToken 字段

wordpress - 如何将CSRF添加到wordpress中手动创建的表单?

php - csrf ... php 表单安全

java - 使用 SMTP 和 Apache Camel 向自己发送电子邮件

java - 将字符串转换为数字,Java

visual-studio-2008 - 如何在 Visual Studio 2008 中的测试时更改连接字符串或其他应用程序设置?

java - 有什么方法可以在 .jar 文件中设置 Java 系统属性,以便它们具有默认值但可以在命令行中覆盖?

configuration - tmux状态栏配置