ajax(つまりはXMLHttpRequest)って便利ですよね。
異なるドメインにアクセスはできない=クロスドメイン制約
を除いては・・・・。
しかし、JSONPを使うと、なぜ異なるドメインのデータを取得できるのでしょうか?
そんな疑問からのJSONとJSONPの違いを調べました。
参考:ここ
JSON = JavaScript Object Notation
JSONP = JSON with Padding (Padding=不要なもん)
→つまりJSONPはJSONではない!!!
JSONPの仕組み
<script src=”https://google.com/test.js”></script>
//変数data に “グーグルからのメッセージ”;が挿入されるとする。
<script>
alert(data); //「グーグルからのメッセージ」がアラートされる。
</script>
スタイルシートやjQueryライブラリーを呼ぶのもクロスドメインじゃん!そうじゃん!と気付いた次第です。
クロスドメイン制約って簡単に回避できるやーんって、楽勝って感じですよね!
しかし
これって、データ取得先(上記例で言うとgoogle.com)に
自サイトでの実行権を与えっちゃってるんです!
もしも、dataと言う変数に無限アラートが仕込まれてたらどうしょうか?自分は何も実装していないのに、観覧者に不快な思いをさせてしまう可能性があるのです。
こういったXXS攻撃を避けるために、
1.JSON.parse()をしましょう!
JSON.parse()
※JSON,JSONPはオブジェクトのためJSON.stringfy()で文字列にしたのち、JSON.parseしましょうね!
2.JSONP使うのやめましょう!
じゃあ何使えばいいんや!教えてください。