nginx JasperServer代理CSRF错误

gt0wga4j  于 2023-04-05  发布在  Nginx
关注(0)|答案(4)|浏览(203)

我在Ubuntu 14.04 LTS上使用捆绑的Tomcat安装了一个新的JasperReports Server 6.2,带有Nginx代理,这样我就可以访问https://mydomain.xyz/jasperserver。它基本上可以工作,但我无法管理用户和角色。如果我绕过Nginx直接进入Tomcat http://123.123.123.123:8080/jasperserver,一切都可以正常工作。日志显示:
2016-02-28 19:44:08,024错误CsrfGuard,http-nio-8080-exec-3:44 -潜在的跨站请求伪造(CSRF)攻击挫败(用户:,ip:127.0.0.1,uri:/jasperserver/flow.html,错误:请求中缺少所需的令牌)
这与这个老问题完全相同:Running jasperserver behind nginx: Potential CSRF attack。但是我已经尝试了建议的两种缓解措施,仍然不起作用。

  • 我尝试设置underscores_in_headers on;,首先只在http中,然后在server中,然后在两者中。
  • 当这不起作用时,我删除了WEB-INF/esapi/Owasp.CsrfGuard.propertiesJASPER_CSRF_TOKENOWASP_CSRFTOKEN的下划线

我重新启动服务器只是为了确保一切都被清除并重新启动,但仍然不工作。
我正在寻求解决方案的建议和/或关于在哪里更好地诊断问题的指导。我是碧玉的新手,我的Java/Tomcat技能已经生疏了。

vaj7vani

vaj7vani1#

我知道这已经很老了,但从JasperReports Server 7.X开始,可能还有更早的版本:
通过Nginx代理JasperReports Server时,underscores_in_headers on;设置必须在nginx配置中。
here的讨论中看起来,JasperReports Server使用的默认OWASP_CSRFGUARD头将在没有此设置的情况下被Nginx静默删除。我遇到的其他代理和负载均衡器都没有这样做。

gajydyqb

gajydyqb2#

我也遇到了类似的问题,在日志中没有发现任何信息,但是这个带有错误消息potential cross-site request forgery (CSRF) attack thwarted的主题给了我一个想法:默认情况下,我有一个严格的无推荐策略,我把它改为一个稍微开放的策略,碧玉开始按预期工作。

问题

您可以导航到碧玉服务器并可以登录。但是当您打开一个报告时,您会收到如下错误消息:

There was an error on the server. Try again or contact site administrators. (Error UID: some-stupid-uid-you'll-find-nowhere)

原因

锁定引用者策略将导致上述问题。

add_header Referrer-Policy "no-referrer" always;

溶液

当来源和目的地相同时,您需要至少允许引用者信息。一个示例是:

add_header Referrer-Policy "no-referrer-when-downgrade, origin-when-cross-origin" always;

有关Referrer-Policy的更多详细信息,请参见https://scotthelme.co.uk/a-new-security-header-referrer-policy/

4smxwvx5

4smxwvx53#

我在碧玉Reports Server 7.2.X中也有同样的错误。
对我来说,解决方案是将OWASP_CSRFTOKEN更改为OWASP-CSRFTOKEN

# Change the token name to remove underscore
# http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers
# https://tools.ietf.org/html/rfc7230#section-3.2
# https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
sed -i -e "s|OWASP_CSRFTOKEN|OWASP-CSRFTOKEN|g" /usr/local/tomcat/webapps/ROOT/WEB-INF/csrf/jrs.csrfguard.properties
brqmpdu1

brqmpdu14#

到了版本8,这些解决方案都不起作用。我通过修改这个文件来关闭CSRF。WEB-INF/csrf/jrs.csrfguard.properties

org.owasp.csrfguard.Enabled = false
org.owasp.csrfguard.Ajax=false
org.owasp.csrfguard.Config.Print = false

你仍然会得到一个JavaScript错误,但登录和身份验证工作。你可能可以查看JS文件jrs.csrfguard.js,看看为什么它仍然抛出错误。这在Firefox中有效,但在Chrome中无效。

相关问题