Подтвердить что ты не робот

Получите ошибку HTTP 400, если% 2F является частью URL GET в JBOSS

Всякий раз, когда URL-адрес с %2F, который является шестнадцатеричным кодом для /, отправляется на мой сервер JBOSS, я получаю сообщение об ошибке:

HTTP 400 Bad Request error message. 

Вот URL:

http://localhost:8080/application/**abc%2Fhi**?msg=hello"

Если я удалю %2F из URL-адреса, ссылка работает нормально.

Этот %2F должен быть частью URL-адреса и не может быть параметром запроса.

4b9b3361

Ответ 1

Наконец выяснил причину этого (как для JBoss, так и для Apache). Оба приложения намеренно отклоняют URI с кодированной косой чертой (%2F для / и %5C для \), чтобы предотвратить возможные уязвимости безопасности.

Ссылки:

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 script для запуска нескольких служб 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 script для запуска нескольких служб 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 это так же просто, как установка "AllowEncodedSlashes NoDecode" где-то в вашем apache conf или vhost conf (но не работает в .htaccess).

Ссылка Apache: http://httpd.apache.org/docs/current/mod/core.html#allowencodedslashes