.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。这有几个优点:
- 更安全,不会被拦截。
- 它更快,因为不会浪费时间向
http://www.example.com
发送请求只是为了被告知去 https://www.example.com
。
- 它可用于解决混合内容错误,因为如果您不小心包含了 http 源,http 资源(仅适用于该站点,而不是从其他站点加载)将自动更改。内容安全策略的 upgrade-insecure-requests 可能是一个更好的解决方案,但 HSTS 仍然提供基本版本。
此外,正如另一个答案所述,另一个单独的好处是,此设置还意味着浏览器将不允许访问者点击该站点的证书错误,从而增加了额外的攻击安全性。
HSTS 的主要缺点是:
- 您的网站只能是 https - 这看起来很明显,但很容易错过仅 http 网站的一部分。或者,如果使用 includeSubdomain 选项,则为 http 上的子域。
- 虽然您可以将其预加载到浏览器中,但访问者需要先访问该网站以获取 HSTS 政策,但这不太可能做出决定。
- 浏览器支持尚未普及。而且就算是搜索引擎之类的爬虫估计也不会用。
希望这能解释为什么 HSTS 是一件好事并且是你应该保留的东西。在重定向之上。
我已将网站更改为 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。这有几个优点:
- 更安全,不会被拦截。
- 它更快,因为不会浪费时间向
http://www.example.com
发送请求只是为了被告知去https://www.example.com
。 - 它可用于解决混合内容错误,因为如果您不小心包含了 http 源,http 资源(仅适用于该站点,而不是从其他站点加载)将自动更改。内容安全策略的 upgrade-insecure-requests 可能是一个更好的解决方案,但 HSTS 仍然提供基本版本。
此外,正如另一个答案所述,另一个单独的好处是,此设置还意味着浏览器将不允许访问者点击该站点的证书错误,从而增加了额外的攻击安全性。
HSTS 的主要缺点是:
- 您的网站只能是 https - 这看起来很明显,但很容易错过仅 http 网站的一部分。或者,如果使用 includeSubdomain 选项,则为 http 上的子域。
- 虽然您可以将其预加载到浏览器中,但访问者需要先访问该网站以获取 HSTS 政策,但这不太可能做出决定。
- 浏览器支持尚未普及。而且就算是搜索引擎之类的爬虫估计也不会用。
希望这能解释为什么 HSTS 是一件好事并且是你应该保留的东西。在重定向之上。