CSP:升级不安全请求

HTTP Content-Security-Policy (CSP) 的 upgrade-insecure-requests 指令指示用户代理将网站所有不安全的 URL(通过 HTTP 提供的 URL)视为已替换为安全的 URL(通过 HTTPS 提供的 URL)。 此指令适用于具有大量不安全的旧版 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 元元素

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

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

规范

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

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅