別のサイトの iframe の中身は Javascript からは見られない

iframe に関するセキュリティ上の制限

常識かもしれないが、とりあえずメモ。

次のような HTML を考えてみる。

<html>
<body>
<iframe src="http://www.softculture.com/" id="iframe1"></iframe>
</body>
</html>

これをファイルとして保存して、それを FireFox 2.0 で直接読み込む。(つまりローカルで実行)
Firebugs のコンソールで次の Javascript のコードを実行すると、

document.getElementById("iframe1").contentWindow.document.body

"Permission denied to get property HTMLDocument.body" と言われてエラーになる。

別のサイトを読み込む iframe の中身の HTML は、読み込み側の Javascript のコードからは触れないようになっているのだ。こうなってないと、例の hidden フィールドに隠したトークンによる CSRF 対策がまったく意味をなさなくなる。悪意のあるサイトが攻撃対象のサイトのウェブページを iframe でくくって読み込み、トークンを盗み出すことができてしまうからだ。

参考サイト

JavaScript インラインフレーム(iframe)関連
iframe.contentWindow.document.body が取れるのは、同一ドメインのサイトに対してだけ。(って正確な表現かどうか自信がない。すくなくとも、iframe の src が別のドメインの URL のときは無効)

開発者のための正しいCSRF対策
よくまとまってると思う。