gpt4 book ai didi

.htaccess - 警告 : Unnecessary HSTS header over HTTP

转载 作者:行者123 更新时间:2023-12-04 08:21:25 25 4
gpt4 key购买 nike

我想使用 https ://和 非万维网。 网址总是。所以我在我的 htaccess 文件中使用了以下代码。但是我收到了来自 https://hstspreload.org 的警告

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

<ifModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000;
includeSubDomains; preload"
</ifModule>

警告信息如下:

警告: HTTP 上不必要的 HSTS header
http://mysiteurl.com 的 HTTP 页面发送一个 HSTS header 。这对 HTTP 没有影响,应该被删除。

请帮我到 摆脱上述警告 .我也尝试了以下代码,但它不起作用 #ref. topic
 Header always set Strict-Transport-Security "max-age=31536000; 
includeSubDomains; preload" env=HTTPS

最佳答案

尝试删除 always属性。所以这样做:

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

而不是这个:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS

另一个选项是仅在 HTTPS 虚拟主机中设置此选项,而不是在主顶级配置中:

做这个:
<VirtualHost *:443>
(All other virtual host config)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</VirtualHost>

而不是这个:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
<VirtualHost *:443>
(All other virtual host config)
</VirtualHost>

这具有必须添加到每个 VirtualHost 才能生效的缺点(或优点取决于您如何看待它!),而第一个选项将自动应用于所有 HTTPS 虚拟主机。

请,请,请非常小心预加载。不容易逆转!我强烈建议您在提交到预加载列表之前使用良好(即无错误)配置运行几个月 - 看起来您没有这样做。

举一个预加载可能会给您带来问题的示例:假设您运行 https://www.example.com , 这也响应 http://example.com并将您重定向到 https://example.com然后 https://www.example.com (根据预加载提交的要求和您的配置设置)。那么您的网站既可爱又安全。但是,对于在内部重用其域的公司(这很常见),这可能会导致问题 - 尤其是在您预加载时。例如,如果您在 http://intranet.example.com 上运行一个不公开的非安全站点。 ,或者您的站点的非安全开发版本 http://dev.example.com ,那么您可能没有意识到这个站点现在也必须通过 HTTPS 提供服务(因为它是 example.com 的子域)。这很少生效(因为大多数人不访问 http://example.comhttps://example.com 所以永远不会在顶级域上看到此 HSTS header )因此您可能在所有测试期间都不会注意到这个潜在问题。但是,一旦预加载生效,您的浏览器就会知道顶级域的 HSTS,即使没有访问它,您也会立即失去对那些仅 HTTP 站点的访问,并且无法轻易扭转这一点!许多公司仍然有许多仅通过 HTTP 提供的内部站点和工具,并且在短时间内将它们全部升级到 HTTPS(无论如何都应该这样做!)并不容易。

要解决此问题,请在内部使用不同的域,或者您只能在顶级域上不使用 includeSubDomain 进行设置:
<VirtualHost *:443>
ServerName example.com
(All other virtual host config)
#Set HSTS at top level without includeSubDomain
Header always set Strict-Transport-Security "max-age=31536000"
</VirtualHost>

<VirtualHost *:443>
ServerName www.example.com
(All other virtual host config)
#Set HSTS at subdomain level
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

这不是很安全(因为有人可以通过 HTTP 设置其他子域,例如 http://wwww.example.com(注意四个 W)或 http://fake.subdomain.com),但至少它不会破坏那些仅限 HTTP 的站点。此设置将不允许通过预加载列表,因为它需要更安全的 includeSubDomains,即使在顶级域上也是如此。

如果您确实想在顶级域上使用 includeSubDomains,那么我强烈建议您在 HTML 中包含来自顶级域的资源(即使它重定向到 www 版本,因为 HSTS 仍设置为 301s/302s)。这样,即使在您预加载之前,您也可以确保访问者在顶层加载 HSTS 配置。例如,您可以将您的 Logo 替换为对顶级域的调用:
<img source="https://example.com/logo.png">

运行它,并且有一个小的到期时间,并且暂时没有预加载标签。然后增加有效期。然后,如果一切正常,添加预加载标签并提交到预加载列表。

这听起来可能有点痛苦,也许你已经想到了这一切,但是如果不考虑预加载可能会非常危险,因为它不容易逆转。在我看来,预加载 HSTS 对大多数网站来说都是多余的,尽管我同意它是最安全的选择。

关于.htaccess - 警告 : Unnecessary HSTS header over HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com