.htaccess 中的 301 重定向和 HSTS

301 Redirect and HSTS in .htaccess

我已将网站更改为 https 并在 .htaccess 中设置了重定向。但我也设置了严格的传输安全。两者都是必要的还是有用的?

<IfModule mod_headers.c>
     Header always set Strict-Transport-Security "max-age=16070400"
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/ [R=301,L]
</IfModule>

干杯

是的!你应该保留他们两个。从 OWASP docs 开始,使用 HSTS 有很多好处。例如:

  • 自动将 HTTP 请求重定向到 HTTPS。

  • 防止用户覆盖无效的证书消息。

我想你应该看看这个文档 https://varvy.com/pagespeed/hsts.html 上面写着:
它基本上类似于 301 重定向,但在浏览器级别,而不是网页级别。它优于 301 重定向,因为它可以实现为始终只使用 https,而 301 重定向在首次被浏览器看到时实际上是不安全的。

阅读文档后,您可以决定它。

重定向告诉输入 http://www.example.com 的人转到 https://www.example.com。由于默认是 http,如果你离开协议并只输入 www.example.com 那么你将转到 http://www.example.com 所以是的你需要这个重定向。

虽然这有一些问题。

首先,http 是不安全的,可以被网络上的其他人读取和更改。这就是您应该使用 https 的原因。但是,由于 http 不安全,这意味着他们可以拦截您的重定向并让您使用 http 版本并继续拦截您的流量。或者将您重定向到 https://www.evilexample.com

HTTP 严格传输安全(或 HSTS)是一种试图解决此问题的安全机制。您的服务器告诉浏览器始终对该站点使用 https。即使不键入协议(当通常使用 http 时)并且即使您 DO 将协议键入 http.

一旦浏览器为站点加载了 HSTS,它甚至根本不会发送 http 请求,而是会自动将这些更改为 https。这有几个优点:

  1. 更安全,不会被拦截。
  2. 它更快,因为不会浪费时间向 http://www.example.com 发送请求只是为了被告知去 https://www.example.com
  3. 它可用于解决混合内容错误,因为如果您不小心包含了 http 源,http 资源(仅适用于该站点,而不是从其他站点加载)将自动更改。内容安全策略的 upgrade-insecure-requests 可能是一个更好的解决方案,但 HSTS 仍然提供基本版本。

此外,正如另一个答案所述,另一个单独的好处是,此设置还意味着浏览器将不允许访问者点击该站点的证书错误,从而增加了额外的攻击安全性。

HSTS 的主要缺点是:

  1. 您的网站只能是 https - 这看起来很明显,但很容易错过仅 http 网站的一部分。或者,如果使用 includeSubdomain 选项,则为 http 上的子域。
  2. 虽然您可以将其预加载到浏览器中,但访问者需要先访问该网站以获取 HSTS 政策,但这不太可能做出决定。
  3. 浏览器支持尚未普及。而且就算是搜索引擎之类的爬虫估计也不会用。

希望这能解释为什么 HSTS 是一件好事并且是你应该保留的东西。在重定向之上。