每当有一个%2F十六进制代码的URL /发布到我的JBOSS服务器时,我收到一个错误:
HTTP 400 Bad Request error message.
Run Code Online (Sandbox Code Playgroud)
这是URL:
http://localhost:8080/application/**abc%2Fhi**?msg=hello"
Run Code Online (Sandbox Code Playgroud)
如果我%2F从URL中删除链接工作正常.
这%2F必须是URL的一部分,不能是请求参数.
Mar*_*ase 61
最后找出了原因(JBoss和Apache都有).两个应用程序都故意拒绝带有编码斜杠(%2Ffor /和%5Cfor \)的URI,以防止可能的安全漏洞.
链接:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0450
http://securitytracker.com/id/1018110(请参阅第4节.解决方案)
以下是他们为在JBoss中启用此行为而提供的说明:
注意:作为对CVE-2007-0450的回应,JBoss AS认为URL中的编码斜杠和反斜杠无效,其使用将导致HTTP 400错误.按照下面列出的步骤可以允许编码的斜杠和反斜杠,但这样做会使您暴露于CVE-2007-0450相关的攻击:
a)如果您使用/var/lib/jbossas/bin/run.sh设置,请编辑/etc/jbossas/run.conf并附加
- -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true
- -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH = true赋予分配给JAVA_OPTS的字符串
b)如果您使用init脚本设置来运行多个JBoss AS服务,并且您希望在所有服务上默认允许编码,请编辑/etc/jbossas/jbossas.conf并添加行JAVA_OPTS ="$ {JAVA_OPTS}
- -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true
- -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH = true"
c)如果您使用init脚本设置来运行多个JBoss AS服务并希望允许特定服务的斜杠和反斜杠编码,请编辑/ etc/sysconfig/$ {NAME}(其中NAME是您的服务名称)并添加行JAVA_OPTS ="$ {JAVA_OPTS} - -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true - -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH = true"
对于Apache,它就像在apache conf或vhost conf中的某处设置"AllowEncodedSlashes NoDecode"一样简单(但是在.htaccess中不起作用).
Apache链接:http://httpd.apache.org/docs/current/mod/core.html#allowencodedslashes
| 归档时间: |
|
| 查看次数: |
21376 次 |
| 最近记录: |