[PHP-users 35046] mixi application 用の bot
shige02 @ mac.com
shige02 @ mac.com
2010年 3月 5日 (金) 07:25:20 JST
こんにちは。重松です。
車輪の再発明のニオイがしているのですが、mixi application 用の bot を作っています。
もう他の言語で完成して問題がないといえばないのですが、あまりに富豪なので、PHP で書き換えようと考えています。
調べて見ると、mixi application は、opensocial という仕組みを使って認証をしているようです。
opensocial 自体、はじめてなので、用語が正しく分かりませんが、存在する関係者として、mixi (以降mixi), mixi application の開発・サービス提供者 (サーバ)、そして、自分(クライアント)が存在します。
実際のコードとしては、
その1
var a=opensocial.newDataRequest();
a.add(a.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER),"viewer");
a.send(function(b){
var c=b.get("viewer").getData();
g_mixi_name=c.getDisplayName();
g_mixi_id=c.getId();
console.log("g_mixi_name:" +g_mixi_name);
console.log("g_mixi_id:" +g_mixi_id);
})
この辺は、Google にある、opensocial のマニュアル通りの挙動なんですが、mixi の ID と mixi での名前を取得しています。
続いて、
その2
b=mixiのid;
var a=APP_URL+"user/mixi_if.php?dummy="+DUMMY;
console.log("URL:"+a);
j$.ajax({
type:"post",
url:a,
dataType:"json",
oauth:"signed",
data:{mixi_id:b},
success:function(d,c){
}
というような処理をしており、jQuery という JavaScript のライブラリを使っているようですが、標準では、oauth ってのは対応していないようなので、何らかの拡張されたものを使っているようではあります。
フリが長くてゴメンナサイ。
ここでいくつかの疑問が。
(1) Google が提供している opensocial 関連のコードは、どうも JavaScript 版のようで、PHP ではないし、理屈から考えれば、通常はクライアントのブラウザ上で実行されるので至極当然といえば当然。
PHP でやるにはどうしたらいいのか。
ざっと検索するものの、
http://groups.google.com/group/google-gadgets-api-japan/msg/daf4452c886fb468
のように見当違い(ようするにサーバ側の立場から、サーバ側の実装についての質問)のものしか見当たらず。
ruby や java だと client という文字がちらほら見えるけど、まだ中は見てません。
(2) 次に、j$.ajax() で、oauth: "signed" に相当する http request を PHP で行なうにはどうすれば良いのか。
です。
どちらも、bot を作るなり、ブラウザ以外で動作するアプリケーションを開発しようとすれば、必要になる処理だと思いますから、誰か作っていのではないかと思い、質問しました。
(3) それはそうと、上記のコードを読んで思ったんですが、ザルじゃないですかね?
だって、mixi の id は平文でした。
とうことは、いくらでも詐称が出来る。
つまり、mixi からブラウザ上の JavaScript 実行者(クライアント)は恐らく mixi のセッション情報などを使って、実行者を特定し、id を渡したとしても、その id を今度は mixi アプリケーションのディベロッパ、サーバに送信する時には、平文だから、改ざんして渡すことができると思います。
署名したって、改ざんしているものに対しての署名であって、何の意味も成さないと思うんですが。
mixi から mixi の秘密鍵で暗号化(署名)されたものをクライアントである自分が受け取り、それをサーバに転送する、というのならば、サーバの側も mixi の公開鍵でこれを復号して、mixi が確かに渡したデータに相違ない、と確認できるかと思いますが、現状はそうでない。
当該アプリは、利用(登録)者数により PV 単価が変わるからでしょうね、マイミクの数でインセンティブがあるんですが、これも、普通に平文で送っているわけで、詐称が出来るんじゃないかと思っています。
勘違いならいいんですけど。
--
Osamu Shigematsu
PHP-users メーリングリストの案内