安全响应头
安全响应头
Cache-control,Pragma,Expires (缓存的安全响应头)
说明:带有敏感数据的Web页面都应该禁止缓存,以防止敏感信息泄漏或通过代理服务器上网的用户数据互窜问
题。特定条件下,即便指定了”Cache-Control:no-cache”头域,浏览器仍会执行缓存动作。建议应考虑使用”no-store”指令。参考网址: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1
response.setHeader("Cache-Control","no-cache, no-store, must-revalidate");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
样式:
Cache-Control: no-cache
Pragma: no-cache
Expires: Mon, 23 Oct 2023 09:47:54 GMT
Access-Control-Allow-Origin (跨源资源共享(CORS)的安全响应头)
说明:如果不是业务需要,禁止开启跨源资源共享(CORS);如果业务需要,开启特定网页的跨源资源共享,并
对来源/域进行限制。
X-Frame-Options (消减点击劫持的安全响应头)
说明:网站可以使用此功能,来确保本网站的资源禁止被嵌到其他网站中,从而避免点击劫持(clickjacking) 的攻
击。
X-Frame-Options 有三个值:
DENY:不允许页面被任何页面嵌套;
SAMEORIGIN:不允许被非本域的页面嵌套;
ALLOW-FROM uri:不允许被指定域以外的页面嵌套;该配置值不推荐使用,因为浏览器对该属性存在兼容性问题
(比如Chrome浏览器不支持该配置);另外,该属性只能指定一个域。
样式:X-Frame-Options: SAMEORIGIN
X-Content-Type-Options (禁用浏览器的类型猜测响应头)
说明:互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。例
如:"text/html"代表html文档,"image/png"是PNG图片,"text/css"是CSS样式文档。但有些资源的Content-Type是错的或者未定义。某些浏览器会启用MIME sniffing来猜测该资源的类型,解析内容并执行。
例如,即使给一个html文档指定Content-Type为"text/plain",在IE8中这个文档依然会被当做html来解析。利用浏
览器的这个特性,攻击者甚至可以让原本应该解析为图片的请求被解析为JavaScript。通过X-Content-Type-Options这个响应头可以禁用浏览器的类型猜测行为。
这个响应头的值只能是nosniff,即禁止内容类型猜测。
样式:X-Content-Type-Options: nosniff
X-XSS-Protection (XSS防护的安全响应头)
说明:X-XSS-Protection 响应头用来防止XSS攻击,当检测到跨站脚本攻击(XSS)时,浏览器可停止加载页面。
X-XSS-Protection的值有以下几种:
0 :禁用XSS防护功能;
1:开启XSS防护功能(常见的浏览器默认开启)。如果检测到XSS,浏览器将对页面进行清理,删除不安全的部
分;
1; mode=block:开启XSS防护,如果检测到XSS攻击,浏览器将会阻止页面加载;(推荐设置)
1; report=<reporting-uri> (Chromium only) :开启XSS防护,如果检测到XSS攻击,浏览器将清除页面并使用CSP
report-uri指令的功能发送违规报告。
样式:X-Xss-Protection: 1; mode=block
Strict-Transport-Security (强制https请求的响应头)
说明:Strict Transport Security(通常简称为HSTS)是一个安全功能,设置浏览器只能通过HTTPS访问当前域名
下的资源,通过http访问时自动跳转为https。
Strict-Transport-Security头有以下三类设置:
max-age=<expire-time>:设置在浏览器收到这个请求后的秒的时间内凡是访问这个域名下的请求都使用HTTPS请
求;
max-age=<expire-time>; includeSubDomains:如果includeSubDomains参数被指定,那么说明此规则也适用于
对应的子域资源的访问;
max-age=<expire-time>; preload :由google维护,不是HSTS规范的标准规范。
推荐产品设置为:max-age=31536000; includeSubDomains(有效期1年,且适用于子域)
样式:Strict-Transport-Security: max-age=31536000;
Content-Security-Policy (内容安全策略的响应头)
说明:Content-Security-Policy响应头提供一种以可信白名单作机制来限制网站加载的资源,缓解广泛的内容注入
漏洞,比如XSS。
该响应头的格式为:Content-Security-Policy: <policy-directive>; <policy-directive>
常用的policy介绍:
default-src: 定义针对所有类型(js/image/css/font/ajax/iframe/多媒体等)资源的默认加载策略,如果某类型
资源没有单独定义策略,就使用默认的。对于以下每个不存在的指令,用户代理都将查找指令并将其用于此值:
child-src、connect-src、font-src、frame-src、img-src、manifest-src、media-src、object-src、script-src、style-src、worker-src
child-src: 定义Web工作人员的有效来源以及使用元素(例如frame)加载的嵌套浏览上下文<iframe>。
connect-src: 限制可以使用脚本接口加载的URL default-src用作其他提取指令的后备。
font-src: 指定使用加载的字体的有效来源@font-face。
frame-src: 为使用元素(例如<frame>)加载的嵌套浏览上下文指定有效来源<iframe>。
img-src: 指定图像和网站图标的有效来源。
manifest-src: 指定应用程序清单文件的有效来源。
media-src: 指定使用加载媒体来源有效<audio>,<video>和<track>元素。
object-src: 指定有效的来源<object>,<embed>和<applet>元素。
script-src: 指定JavaScript的有效来源。
style-src: 指定样式表的有效来源。
worker-src: 指定有效来源Worker,SharedWorker或ServiceWorker脚本。
常用的directive说明:
*: 允许加载任何内容
'none': 不允许加载任何内容
'self': 允许加载相同源的内容
www.a.com: 允许加载指定域名的资源(此处仅为一个示例)
*.a.com: 允许加载 a.com 任何子域名的资源
https://a.com: 允许加载 a.com 的 https 资源
https:: 允许加载 https 资源
data:: 允许加载 data: 协议,例如:base64编码的图片
'unsafe-inline': 允许加载 inline 资源,例如style属性、onclick、inline js、inline css等
'unsafe-eval': 允许使用eval()和类似的方法从字符串创建代码
response.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains")
配置CSP响应头时,默认建议配置为‘self’,禁止 * 。不推荐使用‘unsafe-inline’ ‘unsafe-eval’(但不禁止使用,
业界google、facebook也在使用)
样式:Content-Security-Policy: base-uri 'self';