Получите ошибку HTTP 400, если% 2F является частью GET URL в JBOSS - PullRequest
25 голосов
/ 01 ноября 2010

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

HTTP 400 Bad Request error message. 

Вот URL:

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

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

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

1 Ответ

60 голосов
/ 12 апреля 2011

Наконец выяснил причину этого (как для 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) Если вы используете настройку сценария инициализации для запуска нескольких служб 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 "

в) Если вы используете установку сценария инициализации для запуска нескольких служб 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...