13

本文简单介绍与安全相同的 HTTP 响应头部,内容整理自《OWASP Secure Headers Project》

HTTP Strict Transport Security

HTTP Strict Transport Security(HSTS) 是一种网络安全策略机制,用于防范降级攻击(Downgrade Attack)和 Cookie 劫持(Cookie Hijacking)。它允许服务器告诉浏览器(或其他代理)只能使用 HTTPS 访问服务,禁止使用 HTTP。实现了 HSTS 策略的服务器通过 HTTPS 链接的 Strict-Transport-Security 头部告诉客户端其策略,HTTP 中的 HSTS 头部会被忽略。

参数:

参数 说明
max-age=SECONDS 指定的时间(秒)范围内浏览器总是使用 HTTPS 来访问
includeSubDomains 可选参数,是否同时应用于当前域名的所有子域名

示例:

Strict-Transport-Security: max-age=31536000; includeSubDomains

Public Key Pinning Extension for HTTP

HTTP Public Key Pinning (HPKP)是一种防止 HTTPS 网站被攻击者使用错误发布或其他欺诈性证书冒充安全证书的安全机制。例如,攻击者可能会欺骗证书颁发机构,然后为错误的为其颁发证书。

HTTPS 服务器会通过头部提供一个公钥哈希列表,在后续的请求中,客户端期望服务端在证书链中使用其中一个或多个公钥哈希。想要安全的部署 HPKP,要求具有成熟的部署和管理机制,否则主机可能会因为固定到一组无效的公钥哈希而使得服务不可用。一旦成功部署,能够大大减小中间人攻击和其他虚假认证问题。

参数:

参数 说明
pin-sha256="<sha256>" Base64 编码的公钥信息指纹,可以指定多个不同的公钥
max-age=SECONDS 指定的时间(秒)范围内总是使用其中一个固定的 key
includeSubDomains 可选参数,是否同时应用于所有子域名
report-uri="<URL>" 可选参数,pin 校验失败后的上报地址

示例:

Public-Key-Pins: pin-sha256="d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM="; pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g="; report-uri="http://example.com/pkp-report"; max-age=10000; includeSubDomains

X-Frame-Options

X-Frame-Options 响应头部用于保护网络应用遭受点击劫持(Clickjacking)攻击。它用来控制网站是否显示其它域的 <iframe> 内容。

参数:

参数 说明
deny 不显示 <frame> 内容
sameorigin 只显示来自同域的 <frame> 内容
allow-from:<DOMAIN> 只显示指定域名的 <frame> 内容

示例:

X-Frame-Options: deny

X-XSS-Protection

X-XSS-Protection 用来开启浏览器自带的 XSS 防护。

参数:

参数 说明
0 不开启
1 开启,当浏览器检测到 XSS 攻击时,会清除不安全的内容
1;mode=block 开启,当浏览器检测到 XSS 攻击时,不会清除内容,而是会阻止页面加载
1;report=<REPORT-URI> (Chrome Only)开启,当浏览器检测到 XSS 攻击时,将清除不安全内容并使用 CSP report-uri 指令发送违规报告

示例:

X-XSS-Protection: 1; mode=block

X-Content-Type-Options

设置该头部可以防止浏览器把响应解析为指定 Content-Type 以外的类型。例如,一个 HTML 文档的 Content-Typetext/plain,但是有些浏览器仍然会把文档当做 HTML 来解析。

参数:

参数 说明
nosniff 阻止浏览器自动推测类型

示例:

X-Content-Type-Options: nosniff

Content-Security-Policy

Content-Security-Policy(CSP)可以用来定义详细的安全策略。它可以大范围地控制浏览器行为,例如默认不允许内嵌脚本,除非显式声明允许。

CSP 的设置较为复杂,由指令和参数组成,指令之间使用 ; 分割,参数之间使用空格分割。指令的值即为参数。

参数:

指令 说明
base-uri 定义相对 URI 的基础 URI
default-src 定义所有资源加载的默认策略,如果对应类型的资源加载策略没有定义,则会使用该策略
script-src 定义可以执行的 Script 来源
object-src 定义 <object><embed><applet> 等可以加载的插件来源
style-src 定义允许加载的样式来源
img-src 定义允许加载的图片来源
media-src 定义允许加载的视频和音频来源
frame-src 定义允许嵌入的 <frame> 来源(已弃用,请使用 child-src 代替)
child-src 定义允许嵌入的 <frame> 来源
font-src 定义允许加载的字体来源
connect-src 定义允许访问的接口域名
manifest-src 定义允许加载的资源清单来源
form-action 定义允许在 <form> 中使用的 action 域名
sandbox 定义 HTML 沙盒策略
script-nonce 要求 script 必须带上随机串(SRI 相关)
referrer 定义客户端必须发送 Referer 头部信息
report-uri 定义违规报告的发送地址
参数 说明
'none' 不允许任何内容
'self' 允许同源内容
data: 允许 data: 协议
www.example.com 允许指定域名内容
.example.com 允许子域名内容
https://example.com 允许指定域名且协议匹配的内容
https: 允许加载 HTTPS 资源
'unsafe-inline' 允许行内资源,如行内 JS 和 CSS 、style 属性、onclick 属性等
'unsafe-eval' 允许 js 动态代码,如 eval

示例:

Content-Security-Policy: default-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval'; report-uri https://example.com/report

Referrer-Policy

Referfer-Policy 响应头部控制浏览器应该在 Referrer 请求头部中发送什么信息。

参数:

参数 说明
no-referrer 不发送 Referrer 头部
no-referrer-when-downgrade 默认值,HTTPS 转 HTTP 时不发送 Referrer 头部
origin 只发送文档源域名
origin-when-cross-origin 同域时发送完整的 URL,跨域时只发送源域名
same-origin 同域时才发送,跨域时不发送
strict-origin 只有在 HTTPS 转 HTTPS 时才发送源域名,其他情况不发送
strict-origin-when-cross-origin 同域时发送完整 URL,HTTPS 转 HTTPS 时发送源域名,HTTPS 转 HTTP 时不发送
unsafe-url 发起同域或跨域请求时发送完整 URL(不含参数)

示例:

Referrer-Policy: no-referrer

mingzhong
2.1k 声望3.2k 粉丝

世界很美好,时间很宝贵。