无需登录 数据私有 本地保存

Web 安全头分析器 - 检测缺失的 HTTP 安全标头

31
0
0
0

核心术语与概念详解

Content-Security-Policy (CSP)

内容安全策略(CSP)是最重要的 HTTP 安全响应头之一,它通过定义哪些外部资源可以被加载和执行来有效防范跨站脚本攻击(XSS)和数据注入攻击。CSP 通过一系列指令来控制资源加载策略,包括 script-src(控制 JavaScript 的来源)、style-src(控制 CSS 的来源)、img-src(控制图片来源)、font-src(控制字体来源)、connect-src(控制 AJAX/WebSocket/Fetch 连接目标)、frame-src(控制 iframe 来源)、object-src(控制插件来源)等。每个指令可以指定多个来源白名单,以及特殊关键字如 'self'(当前域名)、'unsafe-inline'(允许内联脚本/样式,不推荐)、'unsafe-eval'(允许 eval,不推荐)。CSP 还支持 report-uri/report-to 指令,将违规报告发送到指定端点,便于监控和调试。

Strict-Transport-Security (HSTS)

严格传输安全(HSTS)指示浏览器只能通过 HTTPS 与服务器建立连接,即使用户手动输入 HTTP 地址也会被自动重定向到 HTTPS。这有效防止了 SSL 剥离攻击(中间人攻击者将 HTTPS 降级为 HTTP)和会话劫持。HSTS 的主要指令包括 max-age(强制 HTTPS 的有效期,单位秒,建议至少 31536000 即一年)、includeSubDomains(将策略应用于所有子域名)、preload(允许将域名加入浏览器的 HSTS 预加载列表)。首次访问网站时 HSTS 不会生效(因为还没有收到响应头),因此建议申请加入 HSTS 预加载列表来解决首次访问的安全问题。

X-Frame-Options

X-Frame-Options 指示浏览器是否允许将当前页面嵌入到 iframe、frame 或 object 中,主要用于防范点击劫持攻击(攻击者通过透明 iframe 诱骗用户点击)。该头部有三个可选值:DENY(完全禁止嵌入)、SAMEORIGIN(只允许同源页面嵌入)、ALLOW-FROM uri(只允许指定来源的页面嵌入,已被大多数浏览器弃用)。推荐使用 DENY 或 SAMEORIGIN。注意,该头部已被 CSP 的 frame-ancestors 指令逐步取代,但为了兼容旧版浏览器,建议同时配置两者。

X-Content-Type-Options

X-Content-Type-Options 指示浏览器不要对响应内容进行 MIME 类型嗅探,必须使用服务器指定的 Content-Type。该头部只有一个有效值:nosniff。当浏览器嗅探 MIME 类型时,可能会将非脚本文件误判为脚本文件并执行,导致安全风险。例如,攻击者可能上传一个包含恶意 JavaScript 的图片文件,如果浏览器嗅探后将其当作脚本执行,就会导致 XSS 攻击。配置 nosniff 可以有效防止这类攻击。

Referrer-Policy

Referrer-Policy 控制浏览器在发起跨域请求时 HTTP Referer 头中应包含多少 URL 信息。合理的 Referrer 策略可以防止敏感 URL 信息泄露给第三方。推荐的策略值包括:strict-origin-when-cross-origin(同源请求发送完整 URL,跨域请求只发送源信息,降级时不发送)、no-referrer(完全不发送 Referer)、same-origin(同源请求发送,跨域不发送)。Google 推荐使用 strict-origin-when-cross-origin 作为默认策略,它在安全性和功能兼容性之间取得了良好的平衡。

Permissions-Policy

Permissions-Policy(前身为 Feature-Policy)允许网站控制浏览器哪些特性和 API 可以被当前页面及其嵌入的 iframe 使用。通过配置该头部,可以禁用不需要的浏览器特性,减少攻击面。例如,可以禁用 camera(摄像头)、microphone(麦克风)、geolocation(地理位置)、payment(支付 API)等。配置格式为特性名称加允许的来源列表,如 camera=(), microphone=(self) 表示完全禁用摄像头、只允许同源使用麦克风。与 CSP 类似,Permissions-Policy 也支持在 iframe 中通过属性单独配置。

Set-Cookie 安全属性

Set-Cookie 响应头用于设置浏览器 Cookie,包含多个安全相关的属性:Secure 属性指示 Cookie 只能通过 HTTPS 传输,防止在 HTTP 连接中被窃听。HttpOnly 属性指示 Cookie 不能被 JavaScript 通过 document.cookie 访问,防止 XSS 攻击窃取会话 Cookie。SameSite 属性控制 Cookie 在跨站请求中是否被发送,有三个值:Strict(完全不发送)、Lax(部分发送,推荐)、None(始终发送,必须同时设置 Secure)。现代浏览器默认将 SameSite 设为 Lax,建议显式设置以确保兼容性。

Cache-Control

Cache-Control 指示浏览器和中间代理服务器如何缓存响应内容。对于包含敏感信息的页面,应该配置 no-store 指令防止缓存。常用指令包括:no-cache(每次使用前必须向服务器验证)、no-store(完全不缓存)、private(只允许浏览器缓存,不允许代理服务器缓存)、max-age(缓存有效期,单位秒)、must-revalidate(缓存过期后必须向服务器验证)。对于敏感数据页面,推荐使用 no-store, no-cache, must-revalidate 组合。