如果%2F是JBOSS中GET URL的一部分,则会收到HTTP 400错误

Nar*_*h S 25 jboss http

每当有一个%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

  • 是否有与此等效的 Spring Boot? (2认同)