高木浩光@自宅の日記 – ここまで破綻しているケータイID認証(簡単ログイン)

http://takagi-hiromitsu.jp/diary/20100425.html#p01

携帯サイトの簡単ログイン機能に問題提起されて久しいですね。
今回も、セキュリティの専門な高木さんが指摘されています。
内容は以前から言われて事ですが、さらにつっこんだ検証をされているようです。

で、ここかがらワイのアレなんですが、
「簡単ログインを使わず全部のサイトでID/PASSでログインにすればいいんだ!」
みたいな解決策もアレじゃないですか。
だって、携帯ユーザーなんて「色んなサイトで同一ID/PASS」とか「パスワードは0000」とか「忘れた」とか「大文字小文字どころか半角全角の区別もわかんない」みたいな人多いんですよ。
若い人が多いから特に。

ということで今回は「携帯の簡単ログイン機能ってどうすれば実装してもいいのさ?」ってのを出してみるテストです。

今、問題にされてる簡単ログイン機能に関する問題点は

  1. 携帯端末のajaxがdomain baseなのでIPアドレスでアクセス出来ちゃうとajaxで抜き取られてしまう
  2. SoftbankやEmobileでPC接続時に他キャリアの個体識別情報でアクセス出来ちゃう

この2点ですよね。
たぶん。

まず[1]の脆弱性について、ようはIPアドレスでアクセスされた時にサイトにアクセス出来なければいい。
だからVirtualHostでサイトを設定するって対策がありますよね。
というか共有サーバーだと基本的にVirtualHostだし、専用サーバーなら自分で設定してるはずなので変更も可能ですよね。
それだけで防げるのでかなりお手軽。

[2]の問題は

  1. SoftBankなどのPC接続で携帯と同一のIPアドレスが利用される
  2. 他社が勝手につけたヘッダー情報まで面倒みてくれない

というのがあって適当な実装だと脆弱性(他者の個体識別情報でアクセス出来てしまう)に繋がる。
対応としては、キャリア判定と個体識別情報の取得部分をちゃんとすればいいじゃね?と思います。

高木さんは専門家なのであやふやな状態(キャリアが公式に発表していない&何してるか分からない)状況で変な事いいたくないからああいった結びになってるのかな、と妄想してます。

個人的な意見としては「簡単ログインつけない」のは現状のユーザーリテラシーでは逆に危険ではないかと思います。
なので、「簡単ログイン危ない!」→「こうすればOKじゃん!」って方向にいって欲しいという事でこんなの書いてみました。

で最後に僕だとどんな感じでやってるか置いておきます。
最初にIPアドレスからキャリアを判定してキャリア毎に情報を取得する。
高木さんのあげられてる脆弱性の例と違うのはその点位です。

なお、IP判定の部分には高速という下記のプログラムをいつも利用させて貰ってます。
PHPで高速に携帯ゲートウェイのIPから携帯キャリアを判別する – グニャラくんのグニャグニャ備忘録@はてな

class getMobileData
{
	public function get()
	{
		//キャリア判定はIPアドレスで判定
		$carrier = $this->ip2mobile( $_SERVER['REMOTE_ADDR'] );
		$serial	= '';
		//個体識別番号はキャリア毎に取得
		//softbankのIPからdocomoの個体識別情報送信されてもスルーって事です
		switch( $carrier )
		{
			case 'docomo':
				$serial	= $_SERVER['HTTP_X_DCMGUID'];
				break;
			case 'softbank':
				$serial	= $_SERVER['HTTP_X_JPHONE_UID'];
				break;
			case 'au':
				$serial	=$_SERVER['HTTP_X_UP_SUBNO'];
				break;
		}
		return $serial;
	}
	//http://d.hatena.ne.jp/tasukuchan/20071231/1199105717のip2mobileをつけて終わり

(´・ω・`)…使ってていい?

関連する記事

  1. 携帯表示その1 Yii Framework触るぜ日記(5)