Content-Security-Policy: upgrade-insecure-requests 指令

Baseline 已广泛支持

此功能已成熟,可跨多种设备和浏览器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有浏览器中可用。

HTTP Content-Security-Policy (CSP) upgrade-insecure-requests 指令指示用户代理将网站所有不安全的 URL(通过 HTTP 提供)视为已替换为安全的 URL(通过 HTTPS 提供)。此指令适用于具有大量需要重写的不安全旧 URL 的网站。

注意: upgrade-insecure-requests 指令在 block-all-mixed-content 之前评估,如果设置了它,后者实际上是空操作。建议设置其中一个指令,但不要同时设置,除非您希望在重定向到 HTTP 后,在不强制执行 HTTPS 的旧浏览器上强制执行 HTTPS。

upgrade-insecure-requests 指令不能确保通过第三方网站链接访问您的网站的用户在顶级导航中升级到 HTTPS,因此它不能替代 Strict-Transport-Security (HSTS) 标头。后者仍应设置适当的 max-age,以确保用户不会受到 SSL 剥离攻击。

语法

http
Content-Security-Policy: upgrade-insecure-requests;

示例

使用 HTTP 标头

http
Content-Security-Policy: upgrade-insecure-requests;

使用 HTML meta 元素

html
<meta
  http-equiv="Content-Security-Policy"
  content="upgrade-insecure-requests" />

在希望从 HTTP 迁移到 HTTPS 的域 example.com 上设置上述标头后,非导航不安全资源请求会自动升级(第一方和第三方请求)。

html
<img src="http://example.com/image.png" />
<img src="http://not-example.com/image.png" />

这些 URL 将在请求发出之前被重写,这意味着没有不安全的请求会到达网络。请注意,如果请求的资源实际上无法通过 HTTPS 访问,则请求将失败,而不会回退到 HTTP。

html
<img src="https://example.com/image.png" />
<img src="https://not-example.com/image.png" />

导航升级到第三方资源带来更高的潜在中断,这些资源不会升级

html
<a href="https://example.com/">Home</a>
<a href="http://not-example.com/">Home</a>

查找不安全的请求

借助 Content-Security-Policy-Report-Only 标头和 report-uri 指令,您可以设置强制策略和报告策略,如下所示:

http
Content-Security-Policy: upgrade-insecure-requests; default-src https:
Content-Security-Policy-Report-Only: default-src https:; report-uri /endpoint

这样,您仍然可以在您的安全网站上升级不安全的请求,但只有监控策略会受到违反,并将不安全的资源报告到您的端点。

规范

规范
升级不安全请求
# 交付

浏览器兼容性

另见