gpt4 book ai didi

java - CSRF 验证/验证不适用于导出的 war 版本 - 使用 OWASP CSRFGuard 时

转载 作者:行者123 更新时间:2023-12-02 01:13:39 26 4
gpt4 key购买 nike

我有一个使用 Spring MVC 框架构建的 Web 应用程序。我想在不使用 Spring Security 的情况下修复 CSRF 漏洞。因为我启用了其他自定义代码来进行用户身份验证/授权。因此我决定使用 OWASP CSRF Guard 库 ( https://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project )。

我完全按照测试项目进行操作,但是当我从 Eclipse 本地运行它作为调试构建时,它可以完美运行,没有任何问题。但是在我导出 war 并将其托管在生产服务器上之后,CSRF 过滤器不会拦截请求。 token CSRF 注入(inject)正在发生,JSP/JS 页面没有出现问题。但验证根本没有发生在 Controller 或过滤器端。

当应用程序从 Eclipse 启动时,会打印属性文件,但在生产服务器日志上不会打印任何内容。

web.xml

<listener>
<listener-class>org.owasp.csrfguard.CsrfGuardServletContextListener</listener-class>
</listener>

<listener>
<listener-class>org.owasp.csrfguard.CsrfGuardHttpSessionListener</listener-class>
</listener>

<filter>
<filter-name>CSRFGuard</filter-name>
<filter-class>org.owasp.csrfguard.CsrfGuardFilter</filter-class>
</filter>

<context-param>
<param-name>Owasp.CsrfGuard.Config.Print</param-name>
<param-value>true</param-value>
</context-param>

<filter-mapping>
<filter-name>CSRFGuard</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>JavaScriptServlet</servlet-name>
<servlet-class>org.owasp.csrfguard.servlet.JavaScriptServlet</servlet-class>
<init-param>
<param-name>inject-into-attributes</param-name>
<param-value>true</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>JavaScriptServlet</servlet-name>
<url-pattern>/JavaScriptServlet</url-pattern>
</servlet-mapping>

Owasp.CsrfGuard.properties

org.owasp.csrfguard.Logger=org.owasp.csrfguard.log.JavaLogger
org.owasp.csrfguard.configuration.provider.factory=org.owasp.csrfguard.config.overlay.ConfigurationAutodetectProviderFactory
org.owasp.csrfguard.Enabled=true
org.owasp.csrfguard.Protect=true`
org.owasp.csrfguard.ValidateWhenNoSessionExists=true
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.html
org.owasp.csrfguard.action.Rotate=org.owasp.csrfguard.action.Rotate
org.owasp.csrfguard.TokenName=OWASP-CSRFTOKEN
org.owasp.csrfguard.SessionKey=OWASP_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=
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.JavascriptServlet.xRequestedWith=OWASP CSRFGuard Project
org.owasp.csrfguard.configOverlay.hierarchy=classpath:Owasp.CsrfGuard.properties, classpath:Owasp.CsrfGuard.overlay.properties
org.owasp.csrfguard.configOverlay.secondsBetweenUpdateChecks=60

Owasp.CsrfGuard.overlay.properties

org.owasp.csrfguard.configuration.provider.factory=org.owasp.csrfguard.config.overlay.ConfigurationOverlayProviderFactory

org.owasp.csrfguard.JavascriptServlet.refererPattern = http://localhost:8800.*
org.owasp.csrfguard.protected.somepage=/ROOT/somepage.htm

所以我所做的就是从前端禁用此“/ROOT/somepage.htm”资源的 csrf token header ,并尝试在启用 CSRF 保护后查看其是否失败。它在我的本地计算机上失败,但在生产计算机上运行没有错误。

现在我很困惑为什么它在本地机器上工作,而在我导出 war 后它根本不起作用。

这是我试图解决这个问题的第二天。如果有人能让我对此感到高兴,我将不胜感激:)

最佳答案

我终于找到答案了:D

我必须替换以下行

org.owasp.csrfguard.protected.somepage=/ROOT/somepage.htm 

有了这个

org.owasp.csrfguard.protected.somepage=%servletContext%/somepage.htm 

这真是太神奇了!

关于java - CSRF 验证/验证不适用于导出的 war 版本 - 使用 OWASP CSRFGuard 时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57672588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com