web-dev-qa-db-ja.com

Webページは別のページのCookieを読み取ることができますか?

ここでログインしているときにPandoraを聞いていました。次のコマーシャルはInfoSecに関するものでした。それが偶然なのか(おそらく)それとも彼らが何らかの形で知っているのか疑問に思いました。長い話を簡単にするために、私はWebページがそこに配置されなかったCookieにアクセスできるかどうか疑問に思っていました(そのため、かなり正確な閲覧履歴とユーザーの情報を取得しています)。これは防御されるべきであり、おそらく防御されるべきだと私には思われますが、もしそうなら、どうですか?私は自分のコンピューターでCookieを読み取り、少なくともそれらがどこから来たのかを確認できるので、暗号化されているようには見えません...

32
KnightOfNi

はい、これは 同じオリジンポリシー を使用しないように保護されています。これにより、あるサイトが別のCookieを読み取ることができなくなります。

広告があなたがどこに行ったのかを知っているように見える行動を見るとき、それはおそらくサードパーティの広告追跡Cookieによるものです。

したがって、簡単な例として、広告ネットワークを使用するサイトAにアクセスした場合、その広告ネットワークは、PCに追跡Cookieを配置することで、そのサイトにいたことを記録できます。

次に、同じ広告ネットワークを使用するサイトBに移動すると、広告ネットワークは、サイトAにいたときに設定されたCookieを読み取ります(サイトのドメインからコンテンツを読み込んでいるため、サイトのドメインからコンテンツが読み込まれないため同じオリジンを壊す)そしてあなたのブラウジング習慣に基づいてあなたに広告を提供することができます。

41
Rory McCune

適切に設計されたブラウザは、クロスドメインポリシーに違反し、主要なセキュリティ問題となるため、Webサイトが別のWebサイトのCookieにアクセスすることを許可しません。

関連のないWebサイトは、単一の広告追跡ネットワークに情報を送信するスクリプトを実装でき、報告されたアクティビティに基づいて、これらの参加Webサイトにカスタマイズされた広告を提供できます。

「追跡しない」オプションをオンにしても、「追跡しない」リクエストを受け取ったWebサイトが積極的に受け入れた場合にのみ機能するため、「追跡しない」オプションは100%信頼できません。 Cookieは無効にすることもブロックすることもできますが、広告ネットワークがアクティビティを追跡するための簡単な方法は他にもあります。

  • 関連のないサイトのページでは、広告ネットワークサーバーにある画像ファイルを表示できます。ブラウザが画像ファイルをリクエストすると、IPアドレスと参照URL(画像が表示されるページ)が広告ネットワークサーバーに送信されます。画像URLは、(ページサーバーによって生成された)情報パラメーターで拡張できます。幸い、広告ブロッカーがそのような画像をブロックする可能性があります。
  • ブラウザがWebページを要求すると、ページサーバーは広告ネットワークと直接通信し、IPアドレスや要求したコンテンツなどの情報を共有できます。この形式の追跡をブロックすることはできませんが、VPNを使用することで軽減できる可能性があります。

ここにタイミングサイドチャネルがある可能性があります。ユーザーがサインインしている場合、膨大な量の情報が表示されますが、サインアウトしている場合は、フォームに小さなサインが表示されます。インターネットチャネルのスループットは有限であるため、ユーザーが同じページをダウンロードする回数は、コンテンツによって異なります。 JSでは、要素の読み込みにかかる時間を測定できるため、ユーザーが外国の非協力的なWebサイトにサインインしているかどうかを判断することができます。私はこのアイデアをテストしておらず、グーグルさえしていませんが、昨年いくつかの会議で発表されたhstsに対する攻撃がタイミングサイドチャネルを使用していることを知っています。

1
KOLANICH

あなたが書いた:

Webページがそこに配置しなかったCookieにアクセスできるかどうか疑問に思っていました(そのため、かなり正確な閲覧履歴とユーザーの情報を取得しています)。これは防御されるべきである(そしておそらくそうである)ようですが、防御されている場合、どのようにですか?私は自分のコンピューターでcookieを読み取り、少なくともどこから来たかを確認できるので、暗号化されているようには見えません...

あなたは正しいです、はい、あなたはそれがあなたのコンピュータなので、あなたはクッキーの内容を読むことができます。しかし、それはブラウザがどのウェブサイトにもそれらを読ませることを意味するわけではありません。つまり、これらは2つの異なるものです。また、パソコンには個人用のファイルがいくつかある場合がありますが、ウェブサイトでは読み取ることはできません。

興味深い質問があります。これまでは、各Webページに独自のCookieがあると想定していました。しかし、それは誤りであることが判明しました。真実は、各ドメインに独自のCookieがあることです。少なくとも、Firefoxはこのように動作します。したがって、あなたのウェブサイトに3つのページがある場合、彼らはお互いのCookieにアクセスできます。

Cookieからユーザーの閲覧履歴を正確に確認することはできません。 Cookieには通常、ドメイン、有効期限、設定、カウンタなど、ユーザーがフォームに入力したものは何でも保存されます。だから、それらはあなたがクッキーから見つけることができるものです。その最悪のケースは、1ページにクレジットカード番号を入力するとします。 JavaScriptは番号をCookie(CARDNO = 1234567890123456)に保存し、同じドメインの別のページに転送します。次に、そのページは番号を読み取って確認し、3番目のページに送信します。3番目のページはデータをサーバーに送信します。クレイジーに聞こえますが、それは可能です。 Cookieを見ると、ユーザーが3つのページすべてにアクセスしたことがわかりません。知っているのは、Cookie、有効期限、およびOriginに保存されているものだけです。この場合、クレジットカード番号がCookieに保存されていれば、それがCookieに含まれています。はい、暗号化されていても暗号化されていなくてもかまいません。ご覧のとおり、それは大きな問題になるため、他のドメインのWebページはCookieを読み取ることができません。これで、あなたはあなたのコンピュータの所有者なので、あなたはあなたのコンピュータ上の何にでもアクセスすることができ、あなたが望むならあなたはあなたのコンピュータに保存されたすべてのクッキーを見ることができます。そして、あなたがあなたのコンピュータを使用している唯一の人である限り、それはセキュリティ問題ではありません。コンピューターが盗まれた場合、またはコンピューターを誰かと共有した場合でも、管理者アカウントがあれば、他のユーザーのドキュメントやCookieなどを読み取ることができます。

Cookieは、各ドメインがデータを保存するために約5KBのスペースを提供します。それは少し多かれ少なかれかもしれません。 Webサイトがより多くのデータを保存する必要がある場合は、localStorageと呼ばれる新しいものがあります。 Cookieと同じように機能しますが、Webサイトで数キロバイトではなくメガバイトのデータを保存できます。ここでも、cookieと同様に、localStorageの値は同じドメイン内のWebページ間で共有されます。したがって、あるページが値を設定すると、別のページが同じドメイン内のその値を読み取ることができます。

参照: https://html.spec.whatwg.org/multipage/webstorage.html#dom-localstorage

0
Zsolt