本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/01/24/spring-security-response-header-writer/
Spring Security会默认配置若干个相关的HeaderWriter,比如HstsHeaderWriter、XXssProtectionHeaderWriter等。
默认情况下响应的头部类似这样
Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 X-Content-Type-Options: nosniff Strict-Transport-Security: max-age=31536000 ; includeSubDomains X-Frame-Options: DENY X-XSS-Protection: 1; mode=block
这其中有五个HeaderWrite,撇开第一个Cache Control不谈,因为主要是涉及旧版本迁移,剩下了四个。
Content Type Options
这个选项是由于浏览器对于资源会去“猜”。如果返回的资源没有指明类型,那么浏览器就会自己去判断。自动去判断内容是危险,可以构造出XSS攻击。
X-Content-Type-Options: nosniff
当然开启这一特性那么就必须在返回的资源中指明类型,不然会出现无法正确解析的情况。
HTTP Strict Transport Security
一些网站自身就可以同时通过http和https访问,而有些只允许https访问,设置对应的头
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
这种情况下即便中间人可以连接并重定向到http中,浏览器仍然会将网站视为“HSTS host”,以防止中间人攻击。
X-Frame-Options
这个特性是为了对抗点击劫持。在响应头中包含
X-Frame-Options: DENY
就会禁止在frame中的渲染。
X-XSS-Protection
这个特性只是在某些浏览器生效,它们内建了XSS攻击过滤机制。
虽然初衷是好的,但是这个特性有时候会反过来被利用。
默认情况下是不需要移除或者修改这几个header writer的,当然如果你确认其中的某个特性会对应用造成伤害,你可以用过http节点下的header配置来开关或者控制。
<http> <!-- ... --> <headers defaults-disabled="true"> <content-type-options /> <hsts include-subdomains="true" max-age-seconds="31536000" /> <frame-options policy="SAMEORIGIN" /> <xss-protection block="false"/> </headers> </http>
参考资料
https://msdn.microsoft.com/en-us/library/gg622941(v=vs.85).aspx
http://tools.ietf.org/html/rfc6797
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: https://www.huangyunkun.com/2016/01/24/spring-security-response-header-writer/