10

我们正在使用 nginx 进行 https 流量卸载,代理到在端口 8080 上运行的本地安装的 jasperserver (5.2)。

internet ---(https/443)---> nginx ---(http/8080)---> tomcat/jasperserver

当直接在其端口上访问 jasperserver 时,一切都很好。当通过 nginx 访问服务时,一些功能被破坏(例如在 jasperserver UI 中编辑用户)并且 jasperserver 日志具有如下条目:

CSRFGuard: potential cross-site request forgery (CSRF) attack thwarted (user:%user%, ip:%remote_ip%, uri:%request_uri%, error:%exception_message%)

经过一番调试,我们发现了这个问题的原因:

在其标准配置中,nginx 不会转发名称中包含下划线的请求标头。Jasperserver(和 OWASP 框架)默认使用下划线来传输 csrf 令牌(JASPER_CSRF_TOKENOWASP_CSRFTOKEN分别)。

解决方案是:

  • nginx:允许标题中的下划线

    server {
       ...
       underscores_in_headers on;
    
  • jasperserver:更改令牌配置名称jasperserver-pro/WEB-INF/esapi/Owasp.CsrfGuard.properties

另见此处:

4

3 回答 3

6

自己回答 - 希望这对其他人也有用

于 2013-07-31T21:07:39.897 回答
2

Jasperserver 5.5 AWS AMI 有这个问题

更详细:

/var/lib/tomcat7/webapps/jasperserver-pro/WEB-INF/esapi/Owasp.CsrfGuard.properties

改变:

org.owasp.csrfguard.TokenName=JASPER_CSRF_TOKEN
org.owasp.csrfguard.SessionKey=JASPER_CSRF_SESSION_KEY

到:

org.owasp.csrfguard.TokenName=JASPERCSRFTOKEN
org.owasp.csrfguard.SessionKey=JASPERCSRFSESSIONKEY
于 2014-04-15T15:40:21.303 回答
-2

我的 Jasperserver 版本看起来略有不同,CSRFguard 文件位于jasperserver/WEB-INF/csrf

我编辑了jrs.csrfguard.properties文件。

于 2018-05-16T09:22:29.383 回答