2007年08月11日
携帯サイトで位置情報の詐称を許さない方法
Web2.0ワークショップで紹介したように、様々なケータイやPHSでユーザの現在位置が取れるようになってきていて、それを使っていろいろアプリケーションが作れるようになってきている。
その中には、実用アプリだけでなく、私も前管理人をしていたアンテナ奪取や、ケータイ国盗り合戦、Ittemiaのようなエンタメアプリも考えられるわけですが、その際に問題になってくるのが「現在位置の詐称」問題です。
ケータイ、PHSでの位置取得は、SoftBank簡易位置情報のようにHTTPヘッダ、DoCoMoのiエリアのようにPOST等で返ってくる場合もありますが、多くの場合、GETのクエリストリングとして返ってきます。
なので、一旦URLを得てしまえば、クエリストリング中の経緯度を書き換えさえすれば、簡単に詐称できてしまうのです。
実用アプリならば、飽くまで位置情報はユーザの調べる位置を現在位置とするための補助でしかないので、詐称はしたいのならば勝手にすれば?という感じですが、「その場所」に本当に行ったかどうかで競うようなエンタメゲームアプリではそうはいきません。
詐称されてしまうとゲームにならないので、何らかの防衛策を採る必要があります。
まず簡単なのは、詐称すると当然リファラが切れるので、リファラを見る方法ですが、これはあまりお薦めできません。
DoCoMoのiモードのように、リファラを一切返さない仕様もありますし、その他でも、例えばauはリファラを返すということになっているようですが、CDMA2000の初期端末等では一部機種依存(すみません、具体的にどの機種だったかは忘れました)でリファラを返さない端末があったりして、またケータイサイト運営しているとそんな古い時期の端末でも時々ユーザサポート問い合わせが来たりするので、少なくとも私は、積極的に使う気にはなれません。
続いて、私がアンテナ奪取を運営していた頃に採用していた方法なのですが、サイトのセッション管理を1アクセス毎のワンタイムセッションにし、かつURLにセッションIDを埋め込む形にするやり方。
ケータイWebの特性として、「ケータイ端末」上からは、絶対にサイトのHTMLソースを確認することができない、という特性があります。
よって、アクセス毎にセッションIDを変えるワンタイムセッション形式にすると、「一旦アクセスするまでは」絶対に次のアクセスに使われているセッションIDが漏れることはありません。
そして、各ワンタイムセッションIDにおいて、一度でもそのIDでアクセスがあればそのセッションIDでの位置取得を不可にする、というフラグを持たせておいてやれば、詐称することは不可能になります。
何故ならば、一度位置を取得したとして、その際に得たURL上で経緯度を書き換えてやっても、そのURLに使われているセッションIDで位置を取る権利は既に失われていますし、かといって位置を取る権利の残っているセッションIDを知る方法は、HTMLソースを読む方法がないので判らないからです。
この方法の欠点は、1つはアクセス毎にセッションを発行するので、とにかく管理するセッションの数が馬鹿でかくなること。
もう1つの欠点は、ユーザが位置を取った後、ブラウザの「戻る」を使って前のページに戻り再度位置を取ろうとすると、原理上「不正位置取得」扱いになってしまいますが、これではユーザにとってあまりに不便なので、ブラウザの「戻る」を使わなくてもユーザがどんどん「位置取得操作」を行えるよう、位置取得後のページにも再度「位置取得リンク」を埋め込む、といった具合に、サイトのどこからでもユーザがすぐ位置取得操作に移れるようUIの工夫をしなければいけない点。
つまり特定のページだけに位置取得リンクを作ればいいというものではなく、サイト中のあらゆるページに位置取得リンクを作らなければならないので、これは1つ目の欠点とも相まって、ほとんど「PV=セッション発行数」というような状況になり、中々すさまじい事になります。
私がアンテナ奪取を運営していた頃は、会員はせいぜい1000から2000人くらいしかいなかったのですが、1ヶ月あたり発行されるセッション数は70万件近くになっていました。
上記のような方法を長年ノウハウとして持っていたのですが、先日、もっと簡単な別の方法を思いつきました。
よく考えれば、ユーザがHTMLソースを見られない以上、位置取得をしたURLでそのまま位置情報を暗号化した後にリダイレクトをかけてやれば、ユーザには位置を取得するリンクを知られることがありません。
これだと、煩雑なセッションの管理等必要なく、簡単に位置情報の詐称を防ぐ事ができます。
位置情報を暗号化するキーとしては、固定のキーではなく携帯電話から取得できるユーザIDや端末ID等を利用してやれば、同じ位置でもユーザ毎に異なる暗号化結果となり、友人同士で暗号化された位置情報を教え合われたりしても無効になるので、よいのではないかと思います。
また、位置情報を暗号化する際には、暗号化する元の情報がバイト列として短ければ短いほど、暗号化された後の文字列も短く出来るので、単純に経度・緯度の小数を暗号化するのではなく、まずロカポイント等に変換して、精度はほとんど落とさずバイト列として短くするのが吉かなとか思います。
この方法で注意しないといけないのは、リダイレクト前の生の位置情報が渡るURLが、絶対に外部に漏れてはいけないということです。
先のワンタイムセッションの方法ならば、URLが漏れたところでアクセス毎にセッションIDは異なるのですから問題ありませんが、この方法ではリダイレクト前のURLは共通ですから、それがばれてしまうと詐称を許してしまうことになります。
もちろん、携帯からはHTMLソースは見えないわけですが、同じサイトにPC等でアクセスできてしまうと遷移先のURL丸判りですので、ケータイWebのゲートウェイからのアクセスのみ許可するような設定をする等の防御策が必要です。
或いは、位置情報が渡るURLにも、何らかのチェック文字列(「OK」とか)を各ユーザのユーザID/端末ID等で暗号化してやって加えておき、遷移後のページで復号チェックする、等とすれば、URL漏れ対策になるかもしれません。
以上のような方法を使えば位置情報の詐称が防げるようになるので、位置情報をエンタメWebアプリとして使いやすくなるかもしれません。
面白いサイトがこの記事を参考に出てきたりすれば、嬉しいです。
Excerpt: JRトラベルナビゲータとMapionが提供するケータイ国盗り合戦。 これがなかなかおもしろくてはまっている。 内容は、簡単に言ってしまうと携帯電話の位置...
Weblog: ueblog
Tracked: 2007年08月16日 00:54
Excerpt: 携帯の位置情報エンタテイメントサイトを作る際の強敵、位置情報詐称につい...
Weblog: ここギコ!
Tracked: 2007年09月20日 06:30
Excerpt: 私がシステム周りで関わらせていただいていたケータイ国盗り合戦というキャ...
Weblog: ここギコ!
Tracked: 2007年12月11日 15:01
Excerpt: 方々よりノウハウを記事にして共有してくれと突かれていたので、遅くなりま...
Weblog: ここギコ!
Tracked: 2008年01月28日 13:13
Excerpt: ケータイ位置情報を利用したエンターテイメントサイト(特に商品等金品が絡...
Weblog: ここギコ!
Tracked: 2008年10月01日 20:16
DoCoMoだと"iモードアクセス履歴検索サービス"でURLを全部取得できてしまうので難しいですね。
http://www.nttdocomo.co.jp/charge/online/log/index.html
ただ、"前日〜"なので、暗号鍵を毎日更新すればとりあえず問題は回避できそうです。
... そもそもDoCoMoは位置送出を求められた時に履歴や電話帳から引用できるので詐称対策にはまったくならないと思いますがね。。。
Posted by: shao at 2007年08月11日 21:00確かにDoCoMoだとウェブからの位置情報取得は履歴使えちゃいますね。
iアプリの公式専用のGPSのAPIを使えばユーザ側の操作無しで位置情報を取得できるので、ちゃんとやるにはこれを使うのがいいんじゃないかと思います。そこまで大掛かりにするのは現実的じゃなさそうだけれど。
![[ここギコ!]](http://kokogiko.net/logo.png)







・外部BlogをMixi日記にしつつ内部Mixi日記を書く方法(glennacov)
・3Dどきゅめんと…って何?点字文書?(levfelikeinadew)
・3Dどきゅめんと…って何?点字文書?(Snegovt)
・在日参政権問題の根本解決はサンフランシスコ平和条約後の措置を白紙に戻すしかあり得ない(A)
・普天間基地移設が軍事的に見て県外移設はあり得ないとかの議論について(チカズミ)
・馬鹿の言動は確かにJSF氏に責任はないのだけれど、良識に訴えたい(774)
・馬鹿の言動は確かにJSF氏に責任はないのだけれど、良識に訴えたい(SIRO)
・馬鹿の言動は確かにJSF氏に責任はないのだけれど、良識に訴えたい(fnorder)
・馬鹿の言動は確かにJSF氏に責任はないのだけれど、良識に訴えたい(名無し)