5

我对这些东西一无所知,所以请 ELI5 在你的回复中。

按照我的提供商 Dreamhost 的说明,我安装了 SSL 证书,然后将这些行添加到我的 .htaccess 文件中,以强制将 HTTP 请求重写为 HTTPS 请求。

# Redirect http requests to https
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

一切似乎都正常工作,即:每次我尝试使用 HTTP 访问该域下的页面时,它都会被重写为 HTTPS,并且地址栏中会显示“安全”图标。

我的问题是,我还需要启用 HSTS 吗?阅读它,它似乎与之前对 .htaccess 文件的更改完全相同。这是A2 Hosting (不是我的提供商)的摘录:

启用 HSTS

为站点启用 HSTS 后,Web 浏览器会自动将任何不安全请求 (http://) 更改为安全请求 (https://)。启用 HSTS 所需要做的就是在站点的 .htaccess 文件中添加一个标题。Web 浏览器识别此标头,然后处理其余部分,无需您进一步干预。

他们建议将其添加到 .htaccess 中:

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

另一个教程,这次特定于 Dreamhost,说要启用 HSTS 并在 .htaccess 文件中强制使用 HTTPS,但并没有真正说明原因。此页面提出了一些稍微不同的建议:

Header set Strict-Transport-Security "max-age=31415926; includeSubDomains; preload" env=HTTPS

我需要“https 重写”代码片段和 HSTS 吗?还是只有“https 重写”代码片段就足够了?我是否需要 HSTS 代码,如果需要,我的帖子中的两行 HSTS 代码有什么区别?

4

2 回答 2

8

HSTS 让浏览器知道https默认情况下只连接,但每个不同的标志都有一些不同的功能:

  • 包括子域

这意味着如果您的站点在 上mydomain.com,则该策略将适用于所有子域(即foo.mydomain.combar.mydomain.com等)。没有这个包括在内。该政策仅适用于有问题的确切域。

  • 预载

虽然 HSTS 在概念上很棒,但当有人第一次键入mydomain.com浏览器时,它会尝试联系您的网站,http因为它不知道您的网站https让 MITM 攻击者有空间为您提供恶意版本的网站(又名TOFU问题)。为了解决这个问题,默认情况下应该联系的网站有一个集中的浏览器列表,https但为了能够让自己进入该列表,您必须preload在该标题中添加标志。您可以在此处查看有关此内容的更多信息。

于 2017-03-17T20:06:40.817 回答
6

如果未明确指定方案(http 或 https),则默认值为 http。

因此,需要重定向以将其重定向到您首选的 https 版本,因为大多数键入 URL 的访问者不会包含该方案,因此转到 http 版本。

HTTP Strict-Transport-Security (HSTS) 是一种安全方法,可确保您始终使用https。它并不是真的要消除对重定向的需要。特别是 HSTS 通过向您的 Web 浏览器发送一条消息(使用 HTTP 响应标头)说“请在接下来的 X 时间内仅在此站点上使用 https”。此消息仅应在通过 https 访问该站点时发送。因此,如果您不首先重定向,那么很多访问者甚至可能没有意识到您有一个 https 站点,因此不会得到 HSTS 指令。

HSTS 主要用于将网站的默认设置更改为 https,并防止中间人 (MITM) 攻击可能试图让您使用 http:例如,如果您连接到黑客的 wifi 网络并转到您的银行网站,如果通过 https 完成,他们将无法劫持此连接,但如果通过 http 完成,他们将能够劫持此连接,因此攻击者将拦截 http 请求并阻止重定向发生,让您保持在 http 并拦截所有消息往来您的银行。

您可以在 Web 浏览器的代码中“预加载”HSTS 指令,从而提供更高的安全性,因为您无需先通过 https 访问该站点即可获取 HSTS 指令。应该注意的是,基本上没有退路,只有在您真正了解 HSTS 时才应考虑这一点。从预加载列表中删除网站的请求有很多很多, Chrome 至少需要 3 个月(不保证其他浏览器),如果您不在 https 上,则在此期间您的网站完全无法访问。所以这里有一个真正的危险!特别是如果您的某些站点是通过 https 提供的(例如 www.example.com),但有些不是(例如 intranet.example.com)。这也是 HSTS 的危险,但预加载更危险。

另一点需要注意的是,许多网络代理不会使用 HSTS,尤其是不会使用预加载列表(例如搜索引擎爬虫、旧版浏览器等)。因此,HSTS 应该再次用于重定向,而不是替代重定向。

HSTS 是一项很好的安全措施,所有站点都应该使用(一旦他们完全停止使用 http),但与大多数安全措施一样,它也有其自身的风险。因此,请确保在部署之前了解它。我讨厌那些说打开它而不解释它和风险的网站和教程。理论上,使用 HSTS 的站点可能不再需要重定向,但实际上它仍然需要在第一次访问和不了解或不实施 HSTS 的代理时进行。

总结一下:

  • 始终使用重定向。
  • 强烈考虑 HSTS,但首先阅读它,并从较低的 max-age 开始,并且不包含包含子域和预加载 - 直到您真正理解它们的含义。
  • 如果运行高风险站点,则考虑将您的站点提交到 HSTS 预加载列表作为高级别的安全性,但再次注意此处的风险。仅当您真正了解 HSTS 并且觉得您需要这种级别的安全性时才这样做。
于 2017-03-18T08:08:05.233 回答