Получите ошибку 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