web-dev-qa-db-ja.com

同じドメイン内のcookieパス保護

この質問への回答 サブドメイン間でCookieがどのように脆弱になる可能性があるかについて、私は好奇心を刺激されました。

私の知る限り、同じドメインのサブパスにCookieが設定されている場合(www.example.com/dogs)、パスのサブフォルダーでない限り、他のパスからはアクセスできません。つまり、どちらもwww.example.com/catsまたはwww.example.com/はこれらのCookieにアクセスできるはずですが、www.example.com/dogs/labradorでしょう。

さらに読む 、さまざまなパスからCookieを取得することが可能だと思います。

パスの制限は、別のパスからのCookieの不正な読み取りから保護されないことに注意することが重要です。単純なDOMで簡単にバイパスできます(たとえば、Cookieのパスを使用して非表示のiframe要素を作成し、このiframeのcontentDocument.cookieプロパティにアクセスします)。 Cookieアクセスを保護する唯一の方法は、同じOriginポリシーのため、異なるドメインまたはサブドメインを使用することです。

その場合、cookie-pathはどのようなセキュリティ(または機能)を提供しますか?また、iframeを使用して読み取ることができる場合、JavaScriptで直接アクセスできないのはなぜですか?この「制限」は、実際には誤った安心感を与えますか?

15
Yoav Aner

Cookieパスはセキュリティを提供しません(ほとんどの実際の状況では)。

クッキーの仕様は古代の技術であることを理解することが重要です。それはウェブの最初の日からさかのぼります。それ以来、Webのセキュリティモデルは進化し、より慎重に考えられるようになりました。 Cookieのセキュリティモデルは、それに応じて進化していません。

WebのセキュリティモデルとCookieの間のインピーダンスの不一致の別の例として、same-Originポリシーはwww.example.com:80www.example.com:81とは異なるオリジンとして扱いますが、Cookieの目的では同じものとして扱われます。 Michal Zalewskiによる cookieによるセキュリティの奇妙さ に関する詳細な議論を見つけることができます。

クッキーはJavaScriptで読み取ることができます。ブラウザがJavaScriptがCookieを読み取ろうとするときにパスを考慮に入れる可能性がありますが、これはセキュリティ機能ではありません。パスはセキュリティ境界ではないため、 1つのページ上の悪意のあるJavaScriptがCookieを読み取る可能性があります他のパス の場合(たとえば、適切なパスで非表示のiframeを開き、悪意のあるJavascriptを挿入して、Cookieを取得する)。唯一の効果的なセキュリティ境界は、オリジンの粒度です。その結果、セキュリティの観点からの一番下の行は次のとおりです。www.example.com/dogsの悪意のあるJavaScriptは、パスがwww.example.com/catsのCookieを読み取ることができます。

実際には、開発者は通常、以前から残っているこれらのコーナーケースを回避するか、少なくともそれらに依存して追加のセキュリティを提供することを避けます。たとえば、Web開発者はcookie-pathに依存してセキュリティを提供するべきではありません(せいぜい、送信されるCookieの数が減り、状況によっては帯域幅を削減するために使用できます)。別の例として、最近のサイトは通常、非標準のポート番号からのコンテンツの提供を避けています。これは、その状況が予期しないセマンティクスを露呈する別のコーナーケースであるためです。

この時点で、Cookieパスはほとんどが初期の痕跡です。私が知る限り、それはもはやあまり目的を果たさず、cookie-pathが導入されていなかったとしても、今日は気付かないでしょう。ただし、下位互換性の理由から、ブラウザは引き続きサポートする必要があります。そして、それはウェブ上で行われます。 Webは、注意深く設計されたアーティファクトではなく、時間の経過とともに進化したものと考えるのが最善です。その結果、付録のように、今では役に立たない大げさなものが蓄積されています。

23
D.W.