Как добавить X-Content-Type-Options в конфигурацию tomcat

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

в заголовке Anti-MIME-Sniffing X-Content-Type-Options не было установлено значение "nosniff"

эта проверка относится к Internet Explorer 8 и Google Chrome. Убедитесь, что каждая страница задает заголовок > Content-Type и параметры X-CONTENT-Type, если заголовок Content-Type неизвестен

хотя я уже нашел решение эта проблема, я ищу решение из конфигурации tomcat. Можно ли внести изменения в конфигурацию tomcat для этого?

пожалуйста, дайте мне любую идею.

4 ответов


Я думаю, вы можете достичь этого на уровне Tomcat следующими шагами:

  • создайте свой фильтр, упакуйте его в банку, поместите банку в $CATALINA_BASE/lib/
  • добавить определение фильтра в $CATALINA_BASE/conf/web.xml

Если вы используете Tomcat 8, это очень просто-добавьте эти два раздела в свой интернет.XML-код:

<filter>
    <filter-name>HeaderSecurityFilter</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>HeaderSecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

в ответе сервера теперь есть "nosniff" и X-Frame-Options: DENY по умолчанию

Server response

более подробно: Конфигурация Фильтра Tomcat 8


пример кода класса фильтра.

public class SampleResponseFilter implements Filter  {

  @Override
  public void destroy() { }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException
  {
    HttpServletRequest req = (HttpServletRequest) request;
    HttpServletResponse res = (HttpServletResponse) response;
    // Protection against Type 1 Reflected XSS attacks
    res.addHeader("X-XSS-Protection", "1; mode=block");
    // Disabling browsers to perform risky mime sniffing
    res.addHeader("X-Content-Type-Options", "nosniff");
    chain.doFilter(req,res);
  }

  @Override
  public void init(FilterConfig filterConfig) throws ServletException { }
}

дополнить ответ Эда Норисса. Если я просто использую фильтр mappen, как это

    <filter-mapping>
        <filter-name>HeaderSecurityFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

чтобы нацелить все, будут некоторые ненужные заголовки (X-xss-protection и X-Frame-Options) при загрузке медиа-ресурсов, таких как jpg, png и т. д. (по данным https://sonarwhal.com инструмент пылеобразования).

чтобы избежать тезисов, я создал два фильтра и сопоставления, как это:

<filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <async-supported>true</async-supported>
</filter>

<filter>
    <filter-name>httpHeaderSecurityNoX</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
        <param-name>antiClickJackingEnabled</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xssProtectionEnabled</param-name>
        <param-value>false</param-value>
    </init-param>

    <async-supported>true</async-supported>
</filter>

...

<filter-mapping>
    <filter-name>httpHeaderSecurity</filter-name>
    <url-pattern>*.jsp</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

<filter-mapping>
    <filter-name>httpHeaderSecurityNoX</filter-name>
    <url-pattern>*.jpg</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

<filter-mapping>
    <filter-name>httpHeaderSecurityNoX</filter-name>
    <url-pattern>*.png</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

и несколько больше сопоставлений фильтров, попадающих в httpHeaderSecurityNoX для каждого из этих расширений: png, gif, js, css, ico (возможно, он может содержаться в одном url-шаблоне?)

инит-парам

xssProtectionEnabled

не был указан в Tomcat web.xml комментарии, но нашел его здесь

https://vk4u.wordpress.com/2017/03/02/how-to-enable-security-filters-in-tomcat/