使用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>
但是这些标题不会在安全无请求中添加。
<sec:http security="none" pattern="/spring/loginpage" />
可能是什么原因?
答案 0 :(得分:3)
因为如果该模式没有安全性,则不会激活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);
}
}
在mvc-dispatcher-servlet.xml
添加:
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.example.interceptor.SecurityHeadersInterceptor"/>
</mvc:interceptor>
您也应该在任何私人回复上设置Cache-Control: no-store, must-revalidate
(如果包含CSRF令牌,则包括登录表单)。