2007-04-04 [長年日記]

JavaScript Hijacking

なんだか色々書きすぎて要点が分かりにくくなっていますが、要するに、

  • Cookieでセッション管理をしている
  • データをHTTPサーバからJSONで返している

場合に、悪意のあるサイトが、

  • Objectのコンストラクタをフックする
  • scriptタグを使って上記のデータをJSONで返しているURLを指定する

ようなHTMLを使うと、悪意のあるサイトのスクリプトが、返したデータにアクセスできてしまう*1ということでしょうか。

対策としては、

  • CSRF対策と同様にセッションキーなどを一緒にPOSTしてサーバ側でチェックする
  • 返すJSONをコメントアウトしたり、前にwhile(true);のようなコードを付け、正規のクライアントは返された文字列からその部分を取り除いてからevalする

が有効と。

で、prototype.jsなどのクライアントサイドのフレームワークの場合、Content-Typeをtext/javascriptにすると勝手にevalしてくれる機能がありますが、この機能を使うと上記の二番目の対策が取れないので問題があるということですね。

そもそも別のドメインから取ってきたスクリプト同士が実行コンテキストを共有しているのが問題な気がしますが、そこは変更されないのでしょうか。

*1  scriptタグ内のURLにアクセスするときにもCookieは送られるので


トップ «前の日記(2007-04-01) 最新 次の日記(2007-04-07)»