« Japanize - IE 系の User JavaScript エンジンに対応しました | メイン | 安全な JSON, 危険な JSON (Cross-site Including?) »
2007年01月04日
クロスサイトのセキュリティモデル
あけましておめでとうございます。
昨年、社内で「XMLHttpRequest は何故クロスサイトで使えないのか。画像や SCRIPT タグは使えるのに」という疑問 (というより試問) を耳にしました。おもしろい話なのでブログネタにしようと思っていたのですが、新年早々 GMAIL の事例がスラッシュドットされていたので、自分の現時点での理解をまとめてみることにしました。文書を確認して書いているわけではないので、間違いがあれば指摘してください。また、よい参考文献をご存知の方がいらっしゃいましたら、教えていただければ幸いです。
ウェブブラウザのクロスサイトのセキュリティは、おおまかに言うと、サイトごとの独立性をたもつために、ブラウザ上のスクリプト言語による、クロスサイトのデータアクセスを許可しないようになっています。ただ、異なるサイトの画像をインライン表示したり、ユーザーが介在するクロスサイトの操作 (例: FORM の送信) は可能であることからわかるように、実際は、アクセス手法によって異なるアクセス制限手法が使用されています。
アクセスの手法 | アクセス制限の手法 |
---|---|
FRAME, IFRAME | クロスサイトの DOM 操作 (read/write) を禁止 |
IMG | スクリプトから画像データにはアクセスできない (幅と高さは例外) |
CSS, SCRIPT | 制限なし | XMLHttpRequest | クロスサイトのリクエストを発行できない |
以上の理解に基づくと、受信したコンテンツが CSS あるいは JavaScript であるかという判定について、ウェブブラウザは厳格であるべきということが言えます。CSSXSS は、この判定ロジックが甘いが故に HTML が CSS として解釈され、情報が漏洩するというウェブブラウザの脆弱性です。
一方、Google の GMAIL コンタクトリスト漏洩は、ウェブアプリケーション開発者側の問題です。CSS や JavaScript のコードはクロスサイトで参照可能なので、その中に秘密情報を含めてはいけないのです。JSON については、JavaScript として副作用をもたない (もたせようがない) ゆえに文法違反であるがゆえに、秘密情報を含むデータフォーマットとして使用することができるのです注。
2007/1/6 追記: JSON の安全性については、Kazuho@Cybozu Labs: 安全な JSON, 危険な JSON (Cross-site Including?) をごらんください。
15:39 追記: で、結局、質問への答えですが、表からも明らかなように、「XMLHttpRequest ではサーバの任意のデータをスクリプトで処理できるので、クロスサイトのアクセス制限が必要である。IMG タグについては、スクリプトから画像データにアクセスできないため、クロスサイトでの参照を許可することに問題ない。SCRIPT タグや CSS についてはアクセス制限がないため、秘密情報を含めてはならない」ということになります。
注: XML や XHTML についても、E4X をサポートしているウェブブラウザの場合は、同様の議論になります
投稿者 kazuho : 2007年01月04日 11:40
トラックバック
このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/1021
このリストは、次のエントリーを参照しています: クロスサイトのセキュリティモデル:
» [google][json][security]GMailのコンタクトリスト漏洩とプライベートJSONP from snippets from shinichitomita’s journal
GMailのコンタクトリストが外部から呼び出し可能になってしまってた件について。 Google内プライベートなはずのデータが、関係のない外部のサイトから... [続きを読む]
トラックバック時刻: 2007年01月04日 22:13
» クロスサイトスクリプティング from 俺の基地 (PukiWiki/TrackBack 0.3)
そんなことできたら、危ないですよといってるのにダブルスタンダードでやりたがりな人が多いのでここにメモ 目次 目次 要素別 frame ... [続きを読む]
トラックバック時刻: 2008年03月03日 12:04