Spring Security的response header

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: 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/

发表评论