如何在Spring Boot中为/favicon.ico设置严格的传输安全标头

时间:2018-12-19 02:58:58

标签: spring-boot favicon

我的Spring Boot应用程序(v1.4.2,带有undertow启动程序)目前正在为其所使用的每个资源设置Strict-Transport-Security标头,包括我的spring-web RestControllers中的API资源以及{{1中的静态资源}}。我发现的 例外是/src/main/resources/static。该文件缺少标题会触发我们的安全扫描发现,我想清除它们。

这是到目前为止我尝试过的:

  1. 使用/favicon.ico禁用Spring的custom favicon handling
  2. 为HttpSecurity配置中的所有资源添加了explicit header handling

    spring.mvc.favicon.enabled=false

似乎不管我做什么,该资源产生的HTTP响应标头集与Spring Boot服务的其他所有资源都不同。例如,@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) { http.headers() .httpStrictTransportSecurity() .requestMatcher(request -> true); } } 中没有适用于我所有其他响应的缓存控制标头。

有趣的是,我发现,通过将MimeMapping添加到EmbeddedServletContainerCustomizer:

,此文件可以影响的头是Content-Type头(默认行为返回/favicon.ico)。
Content-Type: application/octet-stream

1 个答案:

答案 0 :(得分:1)

SpringBootWebSecurityConfiguration具有默认的忽略路径列表,这些默认路径已添加到servlet堆栈中的第一个安全过滤器之一:

import React from 'react';
import { Map, GoogleApiWrapper } from 'google-maps-react';

const mapStyles = {
  width: '80vw',
  height: '45vw',
  marginLeft: 'auto',
  marginRight: 'auto',
  display: 'block'
};

const containerStyle = {      {/* Added style */}
    position: 'static'
}

const MapComponent = (props) => {
  return (
    <div className="MapComponent">
    <div>
    <a href="https://www.google.com/">Google</a>
    </div>
    <Map
    google={props.google}
    zoom={10}
    style={mapStyles}
    containerStyle={containerStyle}   {/* Added prop */}
    initialCenter={{
      lat: 40,
      lng: 12
    }}
    />
    <div>
    <a href="https://www.google.com/">Google</a>
    </div>
    </div>
  );
}

export default GoogleApiWrapper({
  apiKey: "Key"
})(MapComponent);

您可以通过在SecurityProperties bean上设置“忽略”列表来覆盖此忽略路径列表。

private static List<String> DEFAULT_IGNORED = Arrays.asList(
    "/css/**", 
    "/js/**",
    "/images/**", 
    "/webjars/**", 
    "/**/favicon.ico");

将空列表或空列表传递到@Bean public SecurityProperties securityProperties() { SecurityProperties props = new SecurityProperties(); props.setIgnored(Arrays.asList("none")); return props; } 会产生默认行为,因此我添加了关键字“ none”以指示我不想忽略任何路径。 SpringBootWebSecurityConfiguration在构建“忽略”过滤器之前从列表中删除“无”。