多くの広告がサードパーティのCookieを保存できることは知っていますが、Cookieの読み取りについてはどうですか?もしそうなら、何が彼らがセッションハイジャックを実行するためにセッションIDを読むのを止めますか?
ページに含まれるスクリプトは、httpOnly属性が設定されていないすべてのCookieを読み取ることができます。スクリプトのアクセス制限は、スクリプトが読み込まれたドメインに基づいて決定されるのではなく、どのページに読み込まれたかによってのみ決定されます。つまり、ページに読み込まれたすべてのスクリプトは、スクリプトの起源に関係なく、このページに対する同じアクセスと制御を持ちます。 Cookieに関しては、これは、管理外のサードパーティスクリプトをページに含めている場合、httpOnlyでセッションIDなどの機密Cookieを保護する必要があることを意味します。
ただし、機密データを扱うページにそのようなスクリプトを含めることは悪い考えです。そのようなスクリプトは、(httpOnlyを除いて)Cookieを読み取るだけでなく、フォームから情報(ログイン資格情報など)を抽出したり、クライアント側のアプリケーションロジックを変更したりできるためです。参照 銀行のウェブサイトでドメインを追跡するのが心配ですか? 。
これらのステートメントは、メインページに直接含まれているサードパーティのスクリプトにのみ適用されることに注意してください。代わりに、スクリプトがメインページ内のサードパーティのiframe内のみにある場合、メインページのCookieを読み取ったり、メインページのDOMにアクセスしたり、DOMを変更したりすることはできません。
各Cookieはドメイン(Origin)に属しています。最近のすべてのブラウザーは、同じオリジンポリシーを実装しています。これにより、スクリプトは、スクリプトを実行しているものとは異なるオリジンのCookieにアクセスできなくなります(サブドメインのいくつかの回避策があります)。
もしそうなら、何が彼らがセッションハイジャックを実行するためにセッションIDを読むのを止めますか?
somesite.example
がこの方法で広告スクリプトを実装する場合...
<script src="https://rogueadvertisement.example/script.js"></script>
... CookieにHttpOnly
フラグが設定されていない限り、何もスクリプトがsomesite.example
のCookieにアクセスして変更することを防ぎます。 (このフラグは、allクライアントスクリプトのCookieへのアクセスを拒否し、HTTP応答ヘッダー経由でのみ利用できるようにします。)これは、埋め込みスクリプトが埋め込みサイトのOriginで実行されるためです。
somesite.example
がサードパーティの広告をフレームに埋め込む場合...
<iframe src="https://rogueadvertisement.example/ad.html"></iframe>
...埋め込みドキュメントには独自のOriginがあり、フレーム内で実行されているスクリプトは、親ドキュメントのドメインに属するCookieにアクセスできません。
また、HTML5 sandbox attribute のように、信頼できない可能性のあるソースをより安全に埋め込むためのいくつかのノブがあります。空の属性として使用しています...
<iframe sandbox src="https://rogueadvertisement.example/ad.html"></iframe>
...フレーム内で実行されているanyスクリプトの拒否など、さまざまな追加の制限を適用します。