JSをいじってるとよく出てくるキーワード "JSONP"
JSONとの違いなどについてまとめてみました。
JSON: {'blog': 'ほげぶろぐ', 'author' : 'sseze'}
JSONP: callback({"blog": "ほげぶろぐ", "author" : "sseze"});
なにが違う?
- JSONはテキストデータ、JSONPはscript
- クロスドメインでJSONを読み込む時は、JSONではなくJSONPが使われる(WebAPI等)
- JSONではクロスドメインの壁を越えられない(XMLHttpRequestメソッドの制約)
- scriptタグsrc属性を使うとデータが取得できる(ここでJSONPが使われる)
セキュリティ制約
- CSRFに気をつけろ!
- scriptタグを使う方法はsame-origin-policyが適用されない
- 機密情報、個人情報をJSONPのデータに含めないこと
- JSONPはある意味、JavaScriptの仕様の穴を突いているような仕様と言える
- JSONPを利用することは、そのAPIの提供元にJavaScriptの実行権限を与えることに等しい
- 信用できないサービスのJSONP APIは利用しないようにすること
- JSONPの結果を安易にHTMLとして解釈するとXSSのリスクがある