文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

jsonpはなぜクロスドメイン制約に引っ掛からないのか

まず、JSONPJSONPの違いから


json( JavaScript Object Notation )
JavaScriptの中でオブジェクト(人間が分かりやすいような形)を記述する書式。

例.

{
"name": "Sakurai",
"age": "34",
"address": "Tokyo",
"result": true
}


jsonpJSON with padding)

関数に引数としてJSONオブジェクトを指定し、クロスドメイン間でのデータを扱える形式。
関数名+取得データで異なるドメインに置いてあるスクリプトファイルを読み込むことが出来る。
APIから返されるコールバック関数と同じ名前( callbackFunc(jsonデータ) )で定義しておくと、
データを読み込んだときにその関数が実行される。

例.

callbackFunc(
{
"name": "Sakurai",
"age": "34",
"address": "Tokyo",
"result": true
}
)


でも、なんでjsonpだとクロスドメイン制約に引っ掛からないのか。
別のドメインからデータを取ってこれるんだったらセキュリティ的にヤバイんじゃないの?

と思って気になってしらべたところ、セキュリティに関して説明されてるページを見つけた(古いけど)。
第3回 JSONPでのクロスドメインアクセス:ここが危ない!Web2.0のセキュリティ|gihyo.jp … 技術評論社


JSONPで公開している場合は、そもそも機密情報を含まない。
はてなとかyahooとか、オープンなAPIを提供するために使われることが多いよう。

JSONP形式になってる=厳格なセキュリティ不要な広く公開されてるサービスってことですね。
というかむしろ、機密情報をJSONPで公開してたらまずいってことですね(゜゜)!


逆を言えば、信用できないサービスのJSONP形式のAPIは安易に利用しないほうが良さげ。