使用 spring security 在响应中添加安全标头

San*_*San 5 spring-security owasp

我正在使用 spring 安全版本 3.2。在经过身份验证的请求的响应标头中添加 X-Frame-options、X-content-type-options 等标头。

<sec:http auto-config="false">
     <sec:headers>
          <sec:frame-options policy="DENY" />
          <sec:content-type-options  />
          <sec:xss-protection enabled="true" block="true" />
     </sec:headers>
</sec:http>
Run Code Online (Sandbox Code Playgroud)

但是这些标头没有添加到安全无请求中。

<sec:http security="none" pattern="/spring/loginpage" />
Run Code Online (Sandbox Code Playgroud)

可能是什么原因?

Nei*_*gan 5

因为如果该模式没有安全性,则不会激活 Spring Security。

制作你自己的Interceptor,像这样:

public class SecurityHeadersInterceptor extends HandlerInterceptorAdapter {

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

        response.setHeader("Strict-Transport-Security","max-age=31536000 ; includeSubDomains");
        response.setHeader("X-Content-Type-Options", "nosniff");
        response.setHeader("X-Frame-Options", "DENY");
        response.setHeader("X-XSS-Protection", "1; mode=block");
        response.setHeader("Content-Security-Policy", "default-src 'self'");

        super.postHandle(request, response, handler, modelAndView);
    }
}
Run Code Online (Sandbox Code Playgroud)

另外mvc-dispatcher-servlet.xml

<mvc:interceptor>
  <mvc:mapping path="/**"/>
  <bean class="com.example.interceptor.SecurityHeadersInterceptor"/>
</mvc:interceptor>
Run Code Online (Sandbox Code Playgroud)

您也应该设置Cache-Control: no-store, must-revalidate任何私人响应(包括是否包含 CSRF 令牌,如登录表单)。