我在Ubuntu 14.04 LTS上使用捆绑的Tomcat和Nginx代理进行了新的JasperReports Server 6.2安装,因此我可以访问https://mydomain.xyz/jasperserver。它主要起作用,但我无法管理用户和角色。如果我绕过Nginx并直接进入Tomcat http://123.123.123.123:8080/jasperserver,一切都很完美。日志表明:
2016-02-28 19:44:08,024 ERROR 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
,然后是JASPER_CSRF_TOKEN
。OWASP_CSRFTOKEN
中的WEB-INF/esapi/Owasp.CsrfGuard.properties
和<script>
var dataobject=<?php
$returnarry=getDataArray("Select product_id, product_name, product_price from product");
echo json_encode(returnarry);
?>;
//How to convert dataobject to an array
</script>
删除下划线我重新启动服务器只是为了确保所有内容都已清除并重新启动,但仍无效。
我正在寻求解决方案的建议和/或指导哪些方面可以更好地诊断问题。我是Jasper的新手,我的Java / Tomcat技能已经生锈了。
答案 0 :(得分:0)
我知道这已经很老了,但是从JasperReports Server 7.X开始,可能还有更早的版本:
通过Nginx代理到JasperReports Server时,underscores_in_headers on;
设置必须处于nginx配置中。
在讨论here中,Nginx似乎会默认使用默认的OWASP_CSRFGUARD标头JasperReports Server,而无需进行此设置。我没有遇到过其他的代理和负载平衡器。
答案 1 :(得分:0)
我一直在努力解决类似的问题,并且在日志中根本找不到任何信息,但是带有错误消息potential cross-site request forgery (CSRF) attack thwarted
的这个主题使我有了一个主意:默认情况下,我制定了严格的禁止转播策略。我将其更改为稍微开放的政策,贾斯珀开始按预期工作。
您可以导航到Jasper服务器并可以登录。但是,当您打开报告时,会收到如下错误消息:
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/
答案 2 :(得分:0)
我在Jasper 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