【问题标题】:Recommended way to to redirect HTTP requests to HTTPS将 HTTP 请求重定向到 HTTPS 的推荐方法
【发布时间】:2016-08-28 09:46:16
【问题描述】:

我对如何将我所有的 http 页面重定向到 https 有一些疑问。

我看到有人告诉我像 reply 那样重写:

Apache 在this way 中说要做

任何人都可以向我解释进行此更改的推荐方法是什么

【问题讨论】:

    标签: apache .htaccess http ssl https


    【解决方案1】:

    将 http 重定向到 https 的唯一安全方法是使用带有预加载选项的 HSTS(Header Strict-Transport-Security)。

    apache 重定向是不安全的,因为攻击者可以拦截并重写它。不幸的是,对于较旧的浏览器和未预加载 HSTS 的浏览器,这是您唯一的选择:

    <VirtualHost *:80>
          ServerName www.example.com
          Redirect "/" "https://www.example.com/"
    </VirtualHost>
    

    Apache redirect

    在 https 响应中:

    <VirtualHost *:443>
          # Use HTTP Strict Transport Security to force client to use secure connections only
          # Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
          Header always set Strict-Transport-Security "max-age=31536000"
    
          # Further Configuration goes here
          [...]
    </VirtualHost>
    

    HSTS

    或者,使用 .htaccess:

    # Redirect if http
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    # set header if https
    # Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
    Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
    

    Header Strict-Transport-Security (HSTS) 有 2 个作用:

    • 对于访问者,它告诉浏览器只在该域和所有子域上使用 https 一年(所有 http 请求将被重写为 https 请求,无需网络交互)
    • 对于浏览器供应商,“preload”关键字允许他们在源代码中预加载网站。这样,您就可以避免第一个不安全的请求:浏览器已经知道该网站提交给 https。 请注意,HSTS+预加载无法回滚,这是对安全性的明确承诺(但它的优势在于:攻击者也无法将其删除)

    评论中的 HSTS 是最安全但无法回滚的:

    • Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

    未在评论中的 HSTS 安全性较低,因为第一次连接仍然可能不安全,并且不保护子域:

    • Strict-Transport-Security "max-age=31536000"

    HSTS 是针对 SSLTrip 的唯一可靠保护

    SEO 影响:如果网站已经将所有 http 网页重定向到 https,则该标头没有负面(也没有正面)影响。

    【讨论】:

    • 你能告诉我我需要在哪里进行这些更改吗?
    • 谢谢汤姆,但现在的问题是如何在directadmin界面中将这些行放在端口80、433上:(
    • HSTS 很好,但并非没有风险。特别是对于 includeSubDomains(除非您知道所有子域都仅在 https 上),尤其是对于预加载(因为它基本上不可逆)。使用 HSTS - 但在了解它的含义、它的工作原理和风险之前不要。否则你最终可能会自己做 DoSing。对我来说,HSTS 也是一种强制执行 https 的方式,而不是替换标准重定向 - 仍然需要 1)选择 HSTS 策略(除非预加载),2)支持不支持 HSTS 的浏览器,以及 3)支持其他诸如 Google 之类的非浏览器正在抓取您的网站。
    • @Overnet 我已经添加了 .htaccess 版本,它对你有用吗?请仔细阅读有关 HSTS 的说明。
    • @Tom 感谢您的帮助!将来我想更多地了解这一点。但现在我没有时间专注于它。
    【解决方案2】:

    在 /etc/apache2/sites-available/yoursite.conf 中的 Document Root 下方或上方添加

    永久重定向/https://your-site.com/

    【讨论】:

    • 这个答案是正确的,但不完整:没有 HSTS,apache 重定向总是不安全的。
    猜你喜欢
    • 2021-07-27
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 2015-02-02
    • 2014-06-30
    相关资源
    最近更新 更多