security - 在不强制重定向到 HTTPS 的情况下启用 HSTS?

标签 security http https protocols hsts

这似乎是一个愚蠢的问题,但我想知道:

  • 如何在不强制将用户重定向到 HTTPS 的情况下部署 HSTS?
  • 如何仍然从与使用 HSTS 的域相同的域提供 HTTP 内容? (整个网站或混合内容)
  • 为什么会有人这样做?

我正在阅读 from the EFF site看起来已经完成了:

We recently enabled HSTS for eff.org. It took less than an hour to set up, and we found a way to do it without forcibly redirecting users to HTTPS, so we can state an unequivocal preference for HTTPS access while still making the site available in HTTP. It worked like a charm and a significant fraction of our users are now automatically accessing our site in HTTPS, perhaps without even knowing it.

据我所知,HSTS 通过发送 HTTP header 来工作:

Strict-Transport-Security: max-age=31536000

因此,如果我访问 https://example.net/ 上的页面如果发送该 header ,则在接下来的 31536000 秒内对域 example.net 的所有 future 请求都将使用 HTTPS,如果(响应?)是 HTTP,则浏览器将显示巨大的红色警告。

有人可以为我澄清一下吗?我对 HSTS 的理解准确吗?还是我遗漏了什么?

最佳答案

HSTS header 应仅通过 HTTPS 发布,并且仅在通过 HTTPS 接收时由用户代理强制执行。用户代理应该忽略通过 HTTP 发送的 HSTS header ,因为攻击者可能会恶意注入(inject)它。

这意味着站点可以继续通过 HTTP 提供服务,用户可以根据自己的选择继续通过 HTTP 浏览。但是,如果他们手动将 https://插入地址栏,他们将收到 HSTS header ,然后用户代理会将其视为 HSTS 主机。

这是一种逐步引入强制 HTTPS 流量的好方法,而不是在第一天就强制使用。随着用户意识到安全选项,HTTPS 流量将增加并保持不变,这要归功于 HSTS。也许 EFF 正在逐步引入它,并且可能有一天一旦他们对能够容纳它感到满意,就可以轻弹大“HTTPS 开关”。

关于security - 在不强制重定向到 HTTPS 的情况下启用 HSTS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18545396/

相关文章:

java - 小程序无法从网络驱动器访问文件

java - 我的小程序需要客户端访问资源的权限的策略文件位置在哪里?

java - 使用 BeanUtilsBean 将请求填充到对象中的 HashMap

python - 使用Python登录ask.fm

java - 如何将数据发布到其他服务器中的表单

php - 这个巨大的正则表达式是如何工作的?

java - Google App Engine + Spring + 域对象实例安全

java - 如何设置 IBM HTTP Server 的响应 header

amazon-web-services - AWS 内部负载均衡器的 SSL 证书

google-maps - 在我的网站(https 安全)中使用谷歌地图显示错误