Как добавить 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 по умолчанию
более подробно: Конфигурация Фильтра 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/