別のサイトの 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対策
よくまとまってると思う。