PlaceEngineのJavaScriptAPIのセキュリティ実装について

PlaceEngineという無線LANから位置情報を得るサービスなんだけれども、このサービス、WiFiから得た位置情報にJavaScriptAPIでアクセスできるようになっている。

Firefoxからも楽勝でアクセスできるのできっとActiveXなんかではないだろうという思い、どういう仕組みになっているかを解析してみた。

まず、あらかじめPCにPlaceEngineのクライアントをインストールしておく必要があるのだけど、これが簡易Webサーバとしてサービスしている形になっている。このあたりはなんとなくGoogleデスクトップ検索の結果がGoogle検索に埋め込まれる場合とちょっと近い。

で、localhostに対してクロスドメインでそのWebサーバに対してスクリプト要求をすることで、WiFi関連のデータをとってくることができる。情報はコールバック関数の引数として渡される。

位置情報リクエストを出すクライアント(この場合はWebサイト)の認証は、APIキーとHTTPリファラで行っているっぽい。APIキーが正しくても、リファラをカットしたブラウザだったり、httpsで提供されているサイトから位置情報を取得しようとしたときには「不正なアプリケーションfirefoxが情報を取得しようとしてます」というメッセージが出てしまう*1APIキーを取得したときに申告したURLと異なっている場合も同様に警告が出る。

JavaScriptでのデータリクエストに対するアクセスコントロールをHTTPリファラで行っている例として、JSONPの場合にも使えるテクニックだろうか。ただ、SSLのサイトから使えないというところは場合によっては微妙か。

ちなみにずっとGoogleMapsのAPIキーのサイト制限はきっとリファラベースだろうと思い込んでたのだけど、どうやら違ったらしい。JavaScriptの中でホスト名などをチェックして判定してるみたい。ちゃんとコードの中見てみてわかった。

*1:SSLのサイトからはまともなブラウザだったらリファラを送らないようになっている、らしい。セキュリティを考えてみれば当たり前だけど、最近まで気づきませんでした