代码之家  ›  专栏  ›  技术社区  ›  Md Nurullah

警告:HTTP上不必要的HSTS标头

  •  10
  • Md Nurullah  · 技术社区  · 7 年前

    非www。 URL始终。所以我在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标头
    HTTP页面位于 http://mysiteurl.com

    请帮我 消除上述警告 #ref. topic

     Header always set Strict-Transport-Security "max-age=31536000; 
     includeSubDomains; preload" env=HTTPS
    
    4 回复  |  直到 3 年前
        1
  •  8
  •   Barry Pollard    7 年前

    尝试删除 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中设置,而不是在主顶级配置中设置:

    <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>
    

    这有缺点(或优点,取决于你怎么看!)必须添加到每个虚拟主机才能生效,而第一个选项将自动应用于所有HTTPS虚拟主机。

    举一个预加载会给你带来问题的例子:假设你跑步 https://www.example.com ,这也对 http://example.com 并将您重定向到 https://example.com (根据预加载提交要求和您的配置设置)。那么你的网站是可爱和安全的。然而,对于在内部重用其域的公司(这是很常见的),这可能会导致问题-尤其是当您预加载时。例如,如果您运行一个不安全的站点,而该站点在 http://intranet.example.com http://dev.example.com ,那么您可能没有意识到该站点现在也必须通过HTTPS提供服务(因为它是example.com的子域)。这很少生效(因为大多数人不去 http://example.com 所以不要在顶级域上看到这个HSTS头),所以在所有测试过程中,您可能永远不会注意到这个潜在问题。然而,一旦预加载生效,您的浏览器将知道顶级域中的HST,即使不访问该域,您也会立即失去对这些仅限HTTP的站点的访问权限,并且无法轻松扭转这种情况!许多公司仍然有许多内部网站和工具仅通过HTTP提供服务,并将它们全部升级到HTTPS(顺便说一句,应该这样做!)在短时间内发出通知并不容易。

    <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://wwww.example.com (注意四个Ws)或 http://fake.subdomain.com

    <img source="https://example.com/logo.png">
    

    用它运行,一个小到期,一点也没有预加载标签。然后增加到期日。然后,如果所有这些都有效,则将预加载标记添加回并提交到预加载列表。

        2
  •  0
  •   henriquehbr    5 年前

    Ubuntu 18.04 apache2 Letsencrytp

    nano /etc/apache2/conf-enabled/ssl-params.conf
    

    标头始终设置严格的传输安全性“max age=63072000;includeSubDomains;preload”env=HTTPS

    service apache2 restart
    

    删除或注释#上的所有其他vhost conf apache.conf #Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" env=HTTPS

        3
  •  0
  •   rid1hossain    3 年前

    我用这种方法解决了基于litespeed的服务器中的错误。也适用于apache。首先将此代码添加到htaccess中-

    # Force HTTPS
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    然后添加此代码-

    <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" env=HTTPS
    </IfModule>
    
        4
  •  -1
  •   Alexander Higgins    7 年前

    问题是,当用户使用连接时,您正在发送标头 HTTP

    如果你想强迫他们使用 HTTPS

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]