Http 响应头处理
Http 响应头处理
Spring Security 支持一些响应头信息,显示支持的 Http 响应头主要有如下几种:
在 HeaderWriterFilter 中添加,默认情况下,该过滤器会添加到 Spring Security 过滤器链中,HeaderWriterFilter 是通过 HeadersConfigurer 进行配置
默认前五个不为 null
contentTypeOptions.writer:负责处理 X-Content-Type-Options 响应头
xssProtection.writer:负责 X-XSS-Protection 响应头
cacheControl.writer:负责处理 Cache-Control Pragma Expires 的响应头
hsts.writer:负载处理 Strict-Transport-Security 响应头
frameOptions.writer:负责处理 X-Frame-Options 响应头
缓存控制
和缓存控制相关响应头有三个
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Cache-Control
HTTP /1,1 引入,无论请求头还是响应头都支持该字段,no-store 表示不作任何缓存,每次请求都会从服务端完整地下载内容,no-cache 表示缓存但需要重新验证,数据虽然缓存在客户端,但是当需要使用该数据时,还是会向服务端发送请求,服务端则验证请求中所描述的缓存是否过期,如果没有过期,则返回 304,客户端使用缓存;如果已经过期,则返回最新数据。
max-age 表示缓存的有效期,单位为秒,must-revalidate 表示当缓存在使用一个陈旧的资源时,必须先验证它的状态,已过期的将不被使用。
Pragma
和 Cache-Control 类似,兼容 HTTP/1.0
Expires
Expires 指在指定日期之后,缓存过期,如果日期为 0,表示缓存已经过期。
Spring Security 默认就是不做任何缓存,对于放行的 url 会缓存。
要想经过过滤器的请求也开启缓存,需要禁用掉 Security 的 cacheControl .headers().cacheControl().disable()
X-Content-Type-Options
X-Content-Type-Options: nosniff 表示禁用客户端的 MIME 类型的嗅探,即服务端告诉客户端对于 MIME 类型的设置没有任何问题,当 Content-Type 类型值缺失时,不需要客户端对响应报文进行自我解析。
如果不想禁用 MIME 嗅探,配置 .headers().contentTypeOptions().disable()
Strict-Transport-Security
Strict-Transport-Security 用来指定当前客户端只能通过 HTTPS 访问服务端,而不能通过 HTTP 访问。
可以通过 java 自带的 keytool 来生成 HTTPS 证书。
X-Frame-Options
X-Frame-Options 响应头用来告诉浏览器是否允许一个页面在<frame> <iframe> <embed> <object>
中展现,通过该响应头可以确保网站没有被嵌入到其他站点里面,进而避免发生单击劫持。
deny 表示该页面不允许在 frame 中展现。
sameorigin:该页面可以在相同域名页面的 frame 中展示。
allow-from uri:表示该页面可以在指定来源的 frame 中展示。
所谓单击劫持是指攻击者被劫持的页面放在一个 iframe 标签中,设置该 iframe 不可见,然后将 iframe 标签覆盖在另一个页面上,诱使用户在该页面上进行操作,通过调制 iframe 页面位置,使用户单击 iframe 页面的按钮。
X-XSS-Protection
X-XSS-Protection 响应头告诉浏览器当检测到跨站脚本攻击时,浏览器将停止加载页面
0 表示禁止 XSS 过滤
1 表示启用 XSS 过滤。如果检测到跨站脚本攻击,浏览器将清除页面。
1:mode=block 表示启用 XSS 过滤。如果检测到攻击,浏览器不会清除页面,而是阻止页面加载。Spring Security 设置是这个
1:report=<reporting-URI>
表示启用 XSS 过滤,如果检测到跨站脚本攻击,浏览器将清除页面并发送违规报告
所谓 XSS 攻击是 Crocs-Site Scripting 跨站脚本攻击,攻击者在网站上注入恶意的 JavaScript 代码,窃取 Cookie 信息,监听用户行为,修改 DOM 结构。
Content-Security-Policy
Content-Security-Policy 为内容安全策略,简称 CSP,用于检测并削弱某些特定类型的攻击,例如跨站脚本(XSS)和数据注入攻击
CSF 相当于通过一个白名单明确告诉客户端,哪些外部资源可以加载和执行。
Referrer-Policy
Referrer-Policy 描述用户从哪里进入到当前页面
Feature-Policy
Feature-Policy 提供了一种可以在本页面或包含的 iframe 上启用或禁止浏览器特性的机制。使用较少
Clear-Site-Data
Clear-Site-Data 一般用在注销登录响应头中,表示告诉浏览器清除当前网站相关的数据,可以通过具体参数指定想要清除的数据,比如 cookies cache storage 等,也可以通过"*"表示清除所有的数据
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/5ce3b0380210bdd4664f7273e】。文章转载请联系作者。
评论