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

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

HTTP 400 Bad Request error message. 

Вот URL:

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

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

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

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:

а) Если вы используете /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

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

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

Другие вопросы по тегам