mixiアプリ » 技術仕様(RESTful API方式) » PC » JavaScript APIにて取得した友人一覧の詐称
JavaScript APIにて取得した友人一覧の詐称
2009.12.15 発行
PC向けmixiアプリについて、友人一覧の詐称といった問題が報告されています。ここでは、そういった脆弱性を作りこまないために注意すべき点をご紹介いたします。
概要
mixiアプリ(PC版)において、JavaScript APIで提供されているPerson & Friends APIを使用して取得した友人一覧をSAP側の外部サーバに送信する際に、Webブラウザ上で悪意を持った利用者に友人一覧が改ざんされている可能性がある。
JavaScript APIを使って何らかの情報をmixiアプリ内で取得した際に、利用者にその内容を不正に操作されることを防ぐことはできない。取得した情報を外部サーバに送信した際に、その情報が不正に操作されたものかどうかを外部サーバ側で検出する術がない。そのため、Webブラウザを経由せずに、SAP側サーバから mixiサーバに直接RESTful APIを呼び出して友人一覧を取得することで、Webブラウザ上での利用者の介入を行うことができないようにする。
対象
この問題は、mixiアプリ(PC版)にてJavaScript APIを使用して友人一覧を取得し、それを外部サーバにmakeRequest()などで送信する処理を行っている場合に対象となる。特に友人一覧という情報が対象アプリの動作に大きな影響を与える処理に使われている場合には、重大な問題が発生する。
影響
悪意を持つ利用者により、次にあげるような不正利用が行われる可能性がある。
- 友人数の不正な操作により、アプリ内で不当な利益を得る。
- 友人ではない利用者に対して、本来行えない操作を行う。
対策
Webブラウザを介して情報の送信が行われていることが原因であり、mixiサーバから直接外部サーバが情報を得ることができれば、悪意を持つ利用者の不正操作を行う機会をなくすことができる。そのために、RESTful APIを使用することができる。一般的な処理フローは以下となる。
- mixiアプリ(PC版)から、署名付きリクエストを使用して外部サーバに処理要求を送信する。
- 署名付きリクエストに含まれるopensocial_viewer_id(利用者のID)をxoauth_requestor_id値として、RESTful APIにアクセスし、友人一覧を取得する。
- SAP側サーバで何らかの処理を行い、結果をmixiアプリに返却する。
まず、署名付きリクエストを利用することで、確実にmixiアプリの利用者のIDを外部サーバにて入手する。署名付きリクエストにおいて、”opensocial_”で始まるパラメータはmixiサーバにて付与されるため、Webブラウザから不正に改ざんすることはできない。
署名付きリクエスト
http://developer.mixi.co.jp/appli/spec/pc/require_servers#toc-2
次に、RESTful APIで提供されているPerson & Friends APIを利用して、友人一覧を取得する。このアクセスについて、mixiアプリを利用していたユーザの権限としてリクエストを送信するために、先ほど受け取った利用者のIDをxoauth_requestor_idパラメータにセットする。
RESTful API仕様
http://developer.mixi.co.jp/appli/spec/pc/restful-api-for-pc/restful-api-details
これにより、mixiアプリを利用していたユーザの友人一覧について、改ざんの余地なく取得することが可能となる。RESTful APIを利用するために必要となるConsumer Key/Secretの入手方法や、具体的なアクセス手順、サンプルコードなどは、上記のページを参照すること。