ChatGPT解决这个技术问题 Extra ChatGPT

什么是“Upgrade-Insecure-Requests”HTTP 标头?

我向 HTTP(非 HTTPS)站点发出 POST 请求,在 Chrome 的开发者工具中检查了该请求,发现它在将其发送到服务器之前添加了自己的标头:

Upgrade-Insecure-Requests: 1

Upgrade-Insecure-Requests 上进行搜索后,我只能找到关于服务器发送 this 标头的 information

Content-Security-Policy: upgrade-insecure-requests

这似乎相关,但仍然非常不同,因为在我的情况下,客户端正在发送请求中的标头,而我发现的所有信息都与服务器在响应中发送相关标头有关。

那么为什么 Chrome (44.0.2403.130 m) 将 Upgrade-Insecure-Requests 添加到我的请求中,它有什么作用?

2016 年 8 月 24 日更新:

此后,此标头已添加为 W3C Candidate Recommendation,现在已得到官方认可。

对于那些刚刚遇到这个问题并感到困惑的人,Simon East 的 excellent answer 很好地解释了这一点。

Upgrade-Insecure-Requests: 1 标头曾经是 HTTPS: 1 in the previous W3C Working Draft,并在更改被正式接受之前被 Chrome 悄悄地重命名。

(此问题是在此过渡期间提出的,当时没有有关此标头的官方文档,并且 Chrome 是唯一发送此标头的浏览器。)

Firefox 也这样做。
必须是新的;我首先在 Firefox 上进行开发,这个标头绝对不是去年从 Firefox 发送的。

C
Community

简短回答:它与 Content-Security-Policy: upgrade-insecure-requests 响应标头密切相关,表明浏览器支持它(实际上更喜欢它)。

我花了 30 分钟的谷歌搜索,但我终于发现它隐藏在 W3 规范中。

造成混乱是因为规范中的标头是 HTTPS: 1,这就是 Chromium 实现它的方式,但在此 broke lots of websites that were poorly coded(尤其是 WordPress 和 WooCommerce)之后,Chromium 团队道歉:

“我为损坏道歉;我显然低估了基于开发和测试期间的反馈的影响。” — Mike West,Chrome 问题 501842

他们的解决方法是将其重命名为 Upgrade-Insecure-Requests: 1,并且规范已经更新以匹配。

无论如何,这是来自the W3 spec (as it appeared at the time)的解释......

HTTPS HTTP 请求标头字段向服务器发送一个信号,表示客户端对加密和经过身份验证的响应的偏好,并且它可以成功处理 upgrade-insecure-requests 指令,以使该偏好尽可能无缝地提供。 ...当服务器在 HTTP 请求的标头中遇到此偏好时,它应该将用户重定向到被请求资源的潜在安全表示。当服务器在 HTTPS 请求的标头中遇到此首选项时,如果请求的主机是 HSTS 安全或有条件的 HSTS 安全 [RFC6797],它应该在响应中包含 Strict-Transport-Security 标头。


我无法理解它。我是 a.com 并将您重定向到 b.com,同时将此标头提供给 b.com 并发送一些信息。如果您不在 b.com 的安全通道下,则可能已经发生嗅探攻击,因为我已将数据连同我的请求一起发送到 b.com。您能否指导我们了解它如何使用户的连接更加安全的简单场景?
@SaeedNamati 从非常严格的角度来看,它不会让任何事情变得更安全。如果您有正常的安全要求,那么您必须确保首先通过 HTTPS 连接,而不是依赖于此。话虽如此,我将在“Trust on First Use”这个概念的背景下描述这一点,它确实被动地提供帮助。
我认为这更像是客户的愿望而不是安全工具。它就像“DNT”头,服务器可以忽略它,但它表达了客户端的意愿。
我的回答实际上可以得到改进,以正确解释客户端和服务器如何协商这一点。如果您愿意,请随时提出改进建议。
B
Basil Musa

这解释了整个事情:

HTTP Content-Security-Policy (CSP) upgrade-insecure-requests 指令指示用户代理将站点的所有不安全 URL(通过 HTTP 提供的 URL)视为已被安全 URL(通过 HTTPS 提供的 URL)替换。该指令适用于具有大量需要重写的不安全遗留 URL 的网站。 upgrade-insecure-requests 指令在 block-all-mixed-content 之前被评估,如果它被设置,后者实际上是一个 no-op。建议设置一个指令或另一个,但不要同时设置。 upgrade-insecure-requests 指令不会确保通过第三方网站上的链接访问您网站的用户将升级到 HTTPS 以进行顶级导航,因此不会替换 Strict-Transport-Security (HSTS) 标头,该标头仍应设置适当的 max-age 以确保用户不会受到 SSL 剥离攻击。

来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests