monthly gimite

試験運用中。

JavaScript Hijacking

なんかスラドにあがってたので何だそりゃと思って元ネタのPDFをナナメ読みしたんですが、要するに

最近のAjaxアプリの内部でよく使われるような、GETでJSONを返すようなAPIがあると、そのデータを(Cookieで保護されてる場合でさえ)よそのドメインに横取りされることがあるよ。

なんでかというと、

  • scriptタグを使うと、他のドメインJavaScriptを読み込んで評価することができる。*1
  • っていっても{"a": 1, "b": 2}とか評価したところで何も起きないでしょ?
  • いやいやJavaScriptは、なんかごにょごにょしておくと、上のようなコードを評価しただけで色々起きる(データを自前の関数に横流しするとか)ようにできるのよ*2

で、対策としては例えばAPIが返すJSON全体を/* */でコメントアウトしておいて、

  • 普通に(ドメイン内から)使うときはコメントを外してからevalする。
  • 攻撃者が(ドメイン外から)scriptタグで読もうとすると、コメントアウトされてるので何も起きない。

とかそんな感じ。

という話みたいです。話自体はどっかで聞いたことがあるな…。

てかスラドのこのコメントにリンクすればいいだけだったような気がしてきました。まあ書いちゃったので、置いておきます。

*1:この際、そのドメインCookieもちゃんと送信される。

*2:よく知らないですけど。