相关疑难解决方法(0)

为什么HTTP标头名称中禁止使用下划线

几个月前,我遇到了一个名为"SESSION_ID"的自定义HTTP标头的问题,但是没有被nginx代理转移.

我被告知根据HTTP协议的RFC禁止使用下划线.

谷歌搜索,我发现像apachenginx这样的大多数服务器都将它们定义为非法.

RFC2616第4.2节说

遵循与RFC 822 [3.1]第3.1节中给出的相同的通用格式

RFC822

字段名必须由可打印的ASCII字符组成(即,值介于33.和126之间的字符,十进制,冒号除外)

下划线是ASCII表中的95个十进制字符(属于33-126范围).我错过了什么?

apache http nginx rfc

60
推荐指数
2
解决办法
2万
查看次数

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

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

internet ---(https/443)---> nginx ---(http/8080)---> tomcat/jasperserver
Run Code Online (Sandbox Code Playgroud)

当直接在其端口上访问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%)
Run Code Online (Sandbox Code Playgroud)

经过一些调试后,我们找到了原因:

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

解决方案是:

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

    server {
       ...
       underscores_in_headers on;
    
    Run Code Online (Sandbox Code Playgroud)
  • jasperserver:更改令牌配置名称 jasperserver-pro/WEB-INF/esapi/Owasp.CsrfGuard.properties

另见:

proxy nginx csrf owasp jasperserver

10
推荐指数
1
解决办法
4466
查看次数

标签 统计

nginx ×2

apache ×1

csrf ×1

http ×1

jasperserver ×1

owasp ×1

proxy ×1

rfc ×1