Недостатки того, что Tomcat выполняет HTML-файлы в виде кода JSP

1

мы поддерживаем Apache Tomcat для клиента, который подключен к обычным веб-серверам Apache с использованием AJP-моста. В какой-то момент в прошлом клиент запрашивал, что заголовок ответа типа контента всегда содержит "charset = utf-8", который был реализован следующей конфигурацией в Tomcat:

<jsp-config>
   <jsp-property-group>
        <url-pattern>*.html</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

Совсем недавно мы поняли, что это приводит к выполнению HTML файлов, как если бы они были JSP файлами, которые мы хотим избежать, и вместо этого настраиваем заголовок ответа, используя <mime-mapping>. К сожалению, указанная выше конфигурация уже более года работает на производственных серверах, и клиент спросил, почему мы хотим изменить конфигурацию.

Наши первоначальные предложения по соблюдению принципа наименьших привилегий, потенциально более высокие сроки доставки и возросшие шансы на межсайтовый скриптинг приводят только к дополнительным вопросам для деталей. Из-за отсутствия опыта в этих вопросах я надеюсь получить здесь несколько отзывов.

С наилучшими пожеланиями и благодарностью.

  • 0
    «Когда JSP запрашивается в первый раз или когда веб-приложение запускается, контейнер сервлета скомпилирует файл JSP в класс, расширяющий HttpServlet, и будет использовать его во время жизни веб-приложения». из главы Жизненный цикл SO JSP Wiki
Теги:
jsp
tomcat

1 ответ

3
Лучший ответ

Интерпретация HTML как файлов JSP означает, что:

  • <%... %> будет интерпретироваться как код Java
  • <%@%> будет интерпретироваться как директивы JSP
  • <taglib:tag/> будет интерпретироваться как теги JSP
  • ${} будет интерпретироваться как EL-выражения

Написание их в HTML может привести к исключению или непреднамеренному выполнению кода. Теперь это зависит от того, кто может редактировать HTML файлы. Если они редактируются через CMS, это довольно серьезная проблема безопасности.

Если вы хотите принудительно кодировать, это делается с помощью фильтра сервлетов (см. CharacterEncodingFilter), клапана Tomcat (ничего не используется в пакете по умолчанию) или с помощью mod_headers или AddDefaultCharset на вашем HTTP-сервере Apache.

Почти любое решение было бы лучше, чище, проще и безопаснее, чем то, что вы сделали :).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню