-
建议处理敏感用户数据的网站添加以下安全标头:
-
建议所有网站添加的安全标头:
-
具有高级功能的网站的安全标头:
保护您的网站免受注入漏洞的侵害
内容安全政策 (CSP)
跨站脚本攻击 (XSS) 是一种攻击,攻击者会利用网站上的漏洞注入和执行恶意脚本。
Content-Security-Policy
通过限制网页可以执行哪些脚本,提供了额外的层级来缓解 XSS 攻击。
HTTP
Content-Security-Policy:
script-src 'nonce-{RANDOM1}' 'strict-dynamic' https: 'unsafe-inline';
object-src 'none';
base-uri 'none';
可信类型
基于 DOM 的 XSS 是一种攻击,攻击者会将恶意数据传递到支持动态代码执行的接收器(例如 eval()
或 .innerHTML
)。
HTTP
Content-Security-Policy: require-trusted-types-for 'script'
JavaScript
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
// Name and create a policy
const policy = trustedTypes.createPolicy('escapePolicy', {
createHTML: str => {
return str.replace(/</g, '<').replace(/>/g, '>');
}
});
}
// Assignment of raw strings is blocked by Trusted Types.
el.innerHTML = 'some string'; // This throws an exception.
// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML('<img src=x onerror=alert(1)>');
el.innerHTML = escaped; // '&lt;img src=x onerror=alert(1)&gt;'
X-Content-Type-Options
如果恶意 HTML 文档是从您的网域中提交的(例如,上传到照片服务中的图片包含有效的 HTML 标记),某些浏览器会将其视为有效文档,并允许其在应用上下文中执行脚本,从而导致跨网站脚本漏洞。
X-Content-Type-Options: nosniff
通过指示浏览器为给定响应在 Content-Type
标头中设置的 MIME 类型正确无误来防止此类问题。
HTTP
X-Content-Type-Options: nosniff
将您的网站与其他网站隔离
X-Frame-Options
如果恶意网站可以将您的网站嵌入为 iframe,攻击者就可能会通过点击欺骗来诱导用户执行意外操作。此外,在某些情况下,Spectre 类型的攻击会让恶意网站有机会了解嵌入式文档的内容。
X-Frame-Options
用于指示是否应允许浏览器在 <frame>
、<iframe>
、<embed>
或 <object>
中渲染网页。
HTTP
X-Frame-Options: DENY
跨源资源政策 (CORP)
攻击者可以嵌入来自其他来源(例如您的网站)的资源,以利用基于网络的跨网站数据泄露来了解这些资源。
Cross-Origin-Resource-Policy
通过指明可由哪些网站加载来缓解此风险。标头采用以下三个值之一:same-origin
、same-site
和 cross-origin
。建议所有资源发送此标头,以指明它们是否允许由其他网站加载。
makefile
Cross-Origin-Resource-Policy: same-origin
跨源打开者政策 (COOP)
攻击者的网站可以利用基于网页的跨网站数据泄露,在弹出式窗口中打开另一个网站,以了解该网站的相关信息。在某些情况下,这可能还会允许利用基于 Spectre 的旁道攻击。
Cross-Origin-Opener-Policy
标头提供了一种方法,可让文档与通过 window.open()
打开的跨源窗口或不带 rel="noopener"
的 target="_blank"
链接隔离。因此,文档的任何跨源打开器都不会引用该文档,也无法与其互动。
makefile
Cross-Origin-Opener-Policy: same-origin-allow-popups
跨源资源共享 (CORS)
与本文中的其他内容不同,跨源资源共享 (CORS) 不是标头,而是一种用于请求和允许访问跨源资源的浏览器机制。
默认情况下,浏览器会强制执行同源政策,以防止网页访问跨源资源。例如,在加载跨源图片时,即使该图片在网页上以可视方式显示,网页上的 JavaScript 也无法访问该图片的数据。资源提供方可以通过选择启用 CORS 来放宽限制,并允许其他网站读取资源。
yaml
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
安全地构建强大的网站
跨源嵌入器政策 (COEP)
为了降低基于 Spectre 的攻击窃取跨源资源的能力,SharedArrayBuffer
或 performance.measureUserAgentSpecificMemory()
等功能默认处于停用状态。
Cross-Origin-Embedder-Policy: require-corp
会阻止文档和工作器加载跨源资源(例如图片、脚本、样式表、iframe 等),除非这些资源明确选择通过 CORS 或 CORP 标头加载。COEP 可与 Cross-Origin-Opener-Policy
结合使用,以选择将文档纳入跨源隔离。
如需为文档启用跨源隔离,请使用 Cross-Origin-Embedder-Policy: require-corp
。
javascript
Cross-Origin-Embedder-Policy: require-corp
加密指向您网站的流量
HTTP 严格传输安全协议 (HSTS)
通过普通 HTTP 连接进行的通信不会加密,因此网络级窃听者可以访问传输的数据。
Strict-Transport-Security
标头会告知浏览器绝不应使用 HTTP 加载网站,而应改用 HTTPS。设置完毕后,在标头中定义的时间段内,浏览器将使用 HTTPS(而非 HTTP)访问网域,且不会重定向。
ini
Strict-Transport-Security: max-age=31536000