ここが危ない!Web2.0のセキュリティ
第3回 JSONPでのクロスドメインアクセス
JSONPの動作原理
前回はAjaxに存在するセキュリティモデルであるSame-Originポリシーを紹介し,そのSame-Originポリシーを迂回する方法とセキュリティについて見てきました。また,回避する方法の1つめとしてリバースProxyを用いた方法を紹介しました。リバースProxyを用いた方法ではセキュリティ的な問題点もありましたが,そもそもProxyサーバを用意しなければならないため,この方法は手軽に使うことはできませんでした。 そこで考え出されたのがJSONP(JavaScript Object Notation with Padding)という方法です。
それではまず簡単にJSONPについて説明します。 Ajaxで使われるXMLHttpRequestオブジェクトには前回説明したとおりSame-Originポリシーがありクロスドメインアクセスはできません。一方,SCRIPTタグを用いると,ドメインの異なるサーバに置いているスクリプトファイルを読み込むことができます。このスクリプトファイルの中にデータを入れておくことで,ドメインの異なるサーバからデータを取得できるという仕組みです。
では簡単なプログラムを用いて説明していきます。次のようなファイルを用意し,関数を定義しておきます。この関数は,のちほどSCRIPTタグでJSONPデータを読み込んだ時点で実行されますので,コールバック関数と呼ばれます。
<html>
<body>
<script>
function callback(x){ // コールバック関数を定義
alert(x["name"]);
}
</script>
<script src="http://mail.example.com/json.dat"></script>
</body>
</html>
JSONPのデータは以下のようになります。このデータをSCRIPTタグで読み込んだ時点でコールバック関数が実行されることになります。SCRIPTタグにはSame-Originポリシーがありませんので,異なるドメインのサーバにJSONPデータを置くこともできます。
json.datの内容
callback( { "name" : "Fukumori" } );
JSONPとは,このようにSCRIPTタグが他のサーバからもデータを取得できる(Same-Originポリシーがない)という特徴を生かし,クロスドメインでのアクセスを実現する方法です。
また,リバースProxyを使った方法ではリバースProxyサーバに認証情報を送信しなければならないという問題がありましたが,JSONPを使う方法ではその問題が解決されます。もしデータ提供サーバが認証を必要とするサービスを提供していた場合,データ提供サーバへCookieなどの認証情報が送られます。これはブラウザが自動的に送信します。つまりJSONPを使った場合には,本来認証情報を受け取るべきサーバであるデータ提供サーバにだけ認証情報を送信することができます。
ここが危ない!Web2.0のセキュリティ
-
re: そういえばTwitterで遊んでました。
re: そういえばTwitterで遊んでました。
Tracked : #1 IIJIMASが勉強しようとしています。 (2008/10/19, 23:42)


