[復刻版] HSTSコメント

HTTPS:// www.jianshu.com/p/caa80c7ad45c

 

1.原産地:HTTPSを有効にセキュリティが十分ではありません

そこだけHTTPS経由でサービスを提供する多くのウェブサイトがありますが、ユーザーが(例えば、実際のブラウザでウェブサイトのドメイン名に、多くの場合、直接サイトを訪問したときにwww.example.com)、のではなく(例えば、完全なURLを入力してくださいhttps://www.example.com)が、ブラウザはまだすることができHTTPS要求の適切な使用が開始されます。下に示すように、コラボレーションサーバとブラウザにこのおかげで、背後にあります。

 
図1:背後にあるサーバとブラウザは何をするユーザーに多くの作業を支援します

単純である、ブラウザが開始HTTP要求は、リダイレクト応答を取得した後、HTTPS要求を開始し、サイトへの最終的な応答内容を取得し、置きます。このすべては、それがユーザーの目に思えるので、ブラウザで直接ドメイン名を入力し、ユーザに対して完全に透過的であるが、それでもHTTPSプロトコルやWebサイトを使用して安全に通信することができ、優れたユーザーエクスペリエンスです。

すべてがそう完璧なようだが、それはHTTPS接続を確立する前に起因する(上図のステップ1と2)平文HTTPリクエストとリダイレクトの存在のために、真実ではない、攻撃者は仲介道をハイジャックすることができます要求は、そのような、データを盗聴要求と応答、フィッシングサイトへのジャンプを改ざんするなどの後続の攻撃を、実行するためです。

要求し、以下のように練習が一般的であるフィッシングサイトの例を、ハイジャックにジャンプするには:

 
図2:HTTPS接続をブロックするためのハイジャックHTTPリクエスト、フィッシング攻撃し、
  • ステップ1:平文の要求を開始するHTTPブラウザが、実際にそれが攻撃遮断されます
  • 手順2:プロキシとして攻撃者は、現在のフィッシングサイトに転送要求
  • ステップ3:リターン偽のフィッシングサイトのWebコンテンツ
  • ステップ4:ブラウザに偽のWebコンテンツへの攻撃

この攻撃の美しさは、攻撃者が直接HTTPリクエストをハイジャックし、ブラウザにコンテンツを返し、ブラウザに外部提供本物のサイトとのHTTPS接続を構築する機会、ブラウザはHTTP経由で本物のサイトと誤解されますが得られないということですこのサービスは、当然、現在の接続は、ユーザーに安全ではありません報告しません。それ以来、攻撃者はほとんど不思議な要求と応答の手と足のことができます。

2.ソリューション:使用HSTS

今回は、そこに可能性があり、攻撃者によって乗っ取らされる平文HTTPリクエストの設立以来、リダイレクトHTTPS接続する前に、そのアイデアは、自然にこの問題を解決するために、このようなHTTPリクエストを回避する方法になります。私たちは、それが中間者攻撃の男は、リスクを回避するために、失敗するように、直接HTTPリクエストとリダイレクトの上に飛ばし、HTTPSリクエストにブラウザの変換、ブラウザの動作は、ユーザーが許すときに、ブラウザがHTTPリクエストを送信することで期待しています。次のようにその一般的なプロセスは次のとおりです。

 
図3:スキップし、リダイレクトHTTPリクエストは、直接HTTPSリクエストを送信
  • ステップ1:ブラウザが通信にHTTPSを使用する必要があることを、ブラウザのアドレスバーにユーザーのドメインを入力し、ドメイン名
  • ステップ2:HTTPSは、Webサイトに直接リクエストするブラウザを開始
  • ステップ3:対応するウェブサイトのコンテンツを返します。

質問があるので、どのようにそれがこのブラウザで行うには?それはどのようにサイトがHTTPSにサイトがそれを使用する必要があることを要求し、HTTPリクエストを送信する必要があることを知っていますか?ステージ上HSTSとの関係で、この時点で。

2.1 HSTS

HSTSの略H TTP S trict- T ransport- S ecurity、それはWebセキュリティポリシーメカニズムである(ウェブセキュリティポリシーのメカニズム)。

初期の2015年のようにHSTSは、ThoughtWorksの技術レーダーに組み込まれた、そして2016年に、その段階での最新の技術レーダーは、「アセスメント(試用版)」「(採用)採用」への段階、手段そのThoughtWorksの強力な擁護者から直接行きます業界では積極的にこのセキュリティ防御を使用して、ThoughtWorksのは、自分のプロジェクトに適用されています。

HSTS最も中心は、HTTP応答ヘッダー(HTTP応答ヘッダー)です。まさにそれは時間の次の期間に、現在のドメイン名のみがHTTPSを介してアクセスできる、というブラウザを伝えることができ、ユーザーのその後のアクセス要求を拒否することを強制、現在の接続は、ブラウザにセキュリティ保護されていない場合ことがわかりました。

HSTSヘッダーの構文は次のとおりです。

Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]

どこで:

  • max-age是必选参数,是一个以秒为单位的数值,它代表着HSTS Header的过期时间,通常设置为1年,即31536000秒。
  • includeSubDomains是可选参数,如果包含它,则意味着当前域名及其子域名均开启HSTS保护。
  • preload是可选参数,只有当你申请将自己的域名加入到浏览器内置列表的时候才需要使用到它。关于浏览器内置列表,下文有详细介绍。

2.2 让浏览器直接发起HTTPS请求####

只要在服务器返回给浏览器的响应头中,增加Strict-Transport-Security这个HTTP Header(下文简称HSTS Header),例如:

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

就可以告诉浏览器,在接下来的31536000秒内(1年),对于当前域名及其子域名的后续通信应该强制性的只使用HTTPS,直到超过有效期为止。

完整的流程如下图所示:

 
图4:完整的HSTS流程

只要是在有效期内,浏览器都将直接强制性的发起HTTPS请求,但是问题又来了,有效期过了怎么办?其实不用为此过多担心,因为HSTS Header存在于每个响应中,随着用户和网站的交互,这个有效时间时刻都在刷新,再加上有效期通常都被设置成了1年,所以只要用户的前后两次请求之间的时间间隔没有超过1年,则基本上不会出现安全风险。更何况,就算超过了有效期,但是只要用户和网站再进行一次新的交互,用户的浏览器又将开启有效期为1年的HSTS保护。

2.3 让浏览器强制拒绝不安全的链接,不给用户选择的机会####

在没有HSTS保护的情况下,当浏览器发现当前网站的证书出现错误,或者浏览器和服务器之间的通信不安全,无法建立HTTPS连接的时候,浏览器通常会警告用户,但是却又允许用户继续不安全的访问。如下图所示,用户可以点击图中红色方框中的链接,继续在不安全的连接下进行访问。

 
图5:浏览器依然允许用户进行不安全的访问

理论上而言,用户看到这个警告之后就应该提高警惕,意识到自己和网站之间的通信不安全,可能被劫持也可能被窃听,如果访问的恰好是银行、金融类网站的话后果更是不堪设想,理应终止后续操作。然而现实很残酷,就我的实际观察来看,有不少用户在遇到这样的警告之后依然选择了继续访问。

不过随着HSTS的出现,事情有了转机。对于启用了浏览器HSTS保护的网站,如果浏览器发现当前连接不安全,它将仅仅警告用户,而不再给用户提供是否继续访问的选择,从而避免后续安全问题的发生。例如,当访问Google搜索引擎的时候,如果当前通信连接存在安全问题,浏览器将会彻底阻止用户继续访问Google,如下图所示。

 
图6:浏览器彻底阻止用户继续进行不安全的访问

3. 道高一尺魔高一丈:攻击者依然有可乘之机

细心的你可能发现了,HSTS存在一个比较薄弱的环节,那就是浏览器没有当前网站的HSTS信息的时候,或者第一次访问网站的时候,依然需要一次明文的HTTP请求和重定向才能切换到HTTPS,以及刷新HSTS信息。而就是这么一瞬间却给攻击者留下了可乘之机,使得他们可以把这一次的HTTP请求劫持下来,继续中间人攻击。

4. Preload List:让防御更加彻底

针对上面的攻击,HSTS也有应对办法,那就是在浏览器里内置一个列表,只要是在这个列表里的域名,无论何时、何种情况,浏览器都只使用HTTPS发起连接。这个列表由Google Chromium维护,FireFox、Safari、IE等主流浏览器均在使用。

5. 一些Tips

Tips 1:如何配置HSTS

很多地方都可以进行HSTS的配置,例如反向代理服务器、应用服务器、应用程序框架,以及应用程序中自定义Header。你可以根据实际情况进行选择。

常见的是在代理服务器中进行配置,以Nginx为例,只需在配置文件中加上下面这条指令即可:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

不过需要特别注意的是,在生产环境下使用HSTS应当特别谨慎,因为一旦浏览器接收到HSTS Header(假如有效期是1年),但是网站的证书又恰好出了问题,那么用户将在接下来的1年时间内都无法访问到你的网站,直到证书错误被修复,或者用户主动清除浏览器缓存。因此,建议在生产环境开启HSTS的时候,先将max-age的值设置小一些,例如5分钟,然后检查HSTS是否能正常工作,网站能否正常访问,之后再逐步将时间延长,例如1周、1个月,并在这个时间范围内继续检查HSTS是否正常工作,最后才改到1年。

Tips 2:如何加入到HSTS Preload List

根据官方说明,你的网站在具备以下几个条件后,可以提出申请加入到这个列表里。

  • 具备一个有效的证书
  • 在同一台主机上提供重定向响应,以及接收重定向过来的HTTPS请求
  • 所有子域名均使用HTTPS
  • 在根域名的HTTP响应头中,加入HSTS Header,并满足下列条件:
    • 过期时间最短不得少于18周(10886400秒)
    • 必须包含includeSubDomains参数
    • 必须包含preload参数
      当你准好这些之后,可以在HSTS Preload List的官网上(https://hstspreload.org)提交申请,或者了解更多详细的内容。

Tips 3:如何查询域名是否加入到了Preload List

从提交申请到完成审核,成功加入到内置列表 ,中间可能需要等待几天到几周不等的时间。可通过官网https://hstspreload.org或在Chrome地址栏里输入chrome://net-internals/#hsts查询状态。

总结

随着越来越多的网站开始使用HTTPS,甚至是开启全站HTTPS,数据在传输过程中的安全性能够得到极大的保障,与此同时,通过HSTS的帮助,避免SSL Stripping或者中间人攻击,能够使得数据通信变得更加安全。希望本篇文章通过对HSTS的解析,能使得更多的开发团队将HSTS运用到自己的项目中。



著者:一人旅
します。https://www.jianshu.com/p/caa80c7ad45cリンク
出典:ジェーンの本は
、著者が著作権を保有しているが。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

おすすめ

転載: www.cnblogs.com/jinanxiaolaohu/p/12107737.html
おすすめ