ページ

2012-06-17

JSONを"text/html"で返すと何がやばいか?

JSONを"text/html"で返すと何がやばいか?について。

どんなことが起こるのかな?と、色々試したので紹介します。

こんなことが起きます。


以下のJSON文字列をブラウザが受け取った際、ヘッダーに含まれている"Content-Type"によって、動作にどんな違いが有るのか試します。
{"sctipt":"<body onload=alert(1)>","miss img":"<img src=img.jpg>"}
 "Content-Type"は以下の2種類です。
  1. "application/json"
  2. "text/html"(ダイアログと画像が出ます)
"application/json"の方はただ、文字列が表示されるだけです。

安心して見ていられます。


"text/html"の方はやばいですね。

ダイアログが開き、画像が表示されています。

ヘタしたら個人情報が抜き取られるかも…


ブラウザが受け取ったデータをHTMLであるか、JSONであるか、あるいはまた別の何かであるかで挙動が変わってきます。

WebAPIを作成する際には、レスポンスのヘッダに含めるContent-Typeに何を使うかを正しく検証する必要があると思います。

フレームワークとか使うと、その辺をうまい具合にやってくれるので安心だと思います。


上で使ったソースコードを貼っておきます。



0 件のコメント:

コメントを投稿