在nginx后面运行jasperserver:潜在的CSRF攻击

时间:2013-07-29 09:54:20

标签: nginx proxy csrf jasperserver owasp

我们正在使用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
  • 中更改令牌配置名称

另见:

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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

答案 2 :(得分:-2)

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

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