HTTP-Strict-Transport-Security について一緒に探ってみましょう

HTTP Strict-Transport-Security(短縮形の場合が多いHSTS) 応答ヘッダーは、サイトには HTTPS 経由でのみアクセスする必要があること、および今後 HTTP を使用してサイトにアクセスしようとするすべての試行は自動的に HTTPS にリダイレクトされる必要があることをブラウザーに通知するために使用されます。

注:最初の HTTP 接続は依然として中間者攻撃に対して脆弱であるため、これは単にサーバー上で (301)HTTPへの。HTTPS

文法

Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains; preload

命令

  • max-age=<expire-time>

    ブラウザーが HTTPS のみを使用してサイトにアクセスすることを記憶しておく必要がある最大時間 (秒単位)。

  • includeSubDomainsオプション

    このオプションのパラメーターが指定されている場合は、このルールがこの Web サイトのすべてのサブドメインにも適用されることを意味します。

  • preloadオプションの非標準

    HSTS詳細については、「プリロード」を参照してください。使用する場合preloadmax-ageディレクティブは少なくとも31536000(1 年前) のものであり、includeSubDomainsディレクティブが。これは標準の一部ではありません。

説明

Web サイトが HTTP リクエストを受け入れて HTTPS にリダイレクトする場合、ユーザーはリダイレクトを開始する前に暗号化されていない方法でサーバーと通信する可能性があります。たとえば、ユーザーは foo.com と入力するhttp://foo.comこれにより、中間者攻撃の機会が生まれます。リダイレクトを使用すると、元のサイトの安全なバージョンではなく、悪意のあるサイトにユーザーを誘導できます。

Web サイトは、HTTP Strict Transport Security ヘッダーを通じて、この Web サイトが HTTP を使用して読み込まれることが禁止されていることをブラウザーに通知し、ブラウザーは HTTP を使用しようとするすべてのリクエストを HTTPS リクエストに自動的に置き換える必要があります。

备注: Strict-Transport-Security 标头在通过 HTTP 访问时会被浏览器忽略。只有在你的网站通过 HTTPS 访问并且没有证书错误时,浏览器才认为你的网站支持 HTTPS,然后遵守 Strict-Transport-Security 标头。浏览器这样做是因为攻击者可以拦截到站点的 HTTP 连接,然后注入或者删除标头。

示例场景

你登录到一个免费 Wi-Fi 热点,然后开始浏览网站,访问你的网上银行,查看你的支出,并且支付一些订单。很不幸,你接入的 Wi-Fi 实际上是黑客的笔记本热点,他们拦截了你原始的 HTTP 请求,然后重定向到一个与你银行网站一模一样的钓鱼网站。现在,你的隐私数据暴露给黑客了。

Strict Transport Security 解决了这个问题;只要你通过 HTTPS 请求访问银行网站,并且银行网站配置好 Strict Transport Security,你的浏览器知道自动使用 HTTPS 请求,这可以阻止黑客的中间人攻击的把戏。

浏览器如何处理

你的网站第一次通过 HTTPS 请求,服务器响应 Strict-Transport-Security 标头,浏览器记录下这些信息,然后后面尝试访问这个网站的请求都会自动把 HTTP 替换为 HTTPS。

Strict-Transport-Security 标头设置的过期时间到了,后面通过 HTTP 的访问恢复到正常模式,不会再自动重定向到 HTTPS。

每次浏览器接收到 Strict-Transport-Security 标头,它都会更新这个网站的过期时间,所以网站可以刷新这些信息,防止过期发生。如果有禁用 Strict-Transport-Security 的需求,将 max-age 设置为 0(通过 https 连接)将立即使 Strict-Transport-Security 标头失效,从而可以通过 http 访问。

预加载 HSTS

谷歌维护着一个 HSTS 预加载服务。按照如下指示成功提交你的域名后,浏览器将会永不使用非安全的方式连接到你的域名。虽然该服务是由谷歌提供的,但所有浏览器都在使用这个预加载列表。但是,这不是 HSTS 标准的一部分,也不该被当作正式的内容。

示例

现在和未来的所有子域名会自动使用 HTTPS,有效期(max-age)为一年。同时阻止了只能通过 HTTP 访问页面或者子域的内容。

Strict-Transport-Security: max-age=31536000; includeSubDomains

Copy to Clipboard

虽然将域的有效期(max-age)设置为 1 年是可以的,但 hstspreload.org 推荐将其设置为 2 年。

在以下示例中,有效期(max-age)被设置为 2 年,并带有 preload 后缀,该后缀是网站被收录到所有主流的 web 浏览器(如 Chromium、Edge 以及 Firefox)的 HSTS 预加载列表所必须的。

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

おすすめ

転載: juejin.im/post/7235091963313897533