酔っぱらいスクリプターの備忘録。よく消える(意味ねぇ
Archive for 4月, 2010
携帯の簡単ログイン機能を使うには?
4月 27th
高木浩光@自宅の日記 – ここまで破綻しているケータイID認証(簡単ログイン)
http://takagi-hiromitsu.jp/diary/20100425.html#p01
携帯サイトの簡単ログイン機能に問題提起されて久しいですね。
今回も、セキュリティの専門な高木さんが指摘されています。
内容は以前から言われて事ですが、さらにつっこんだ検証をされているようです。
で、ここかがらワイのアレなんですが、
「簡単ログインを使わず全部のサイトでID/PASSでログインにすればいいんだ!」
みたいな解決策もアレじゃないですか。
だって、携帯ユーザーなんて「色んなサイトで同一ID/PASS」とか「パスワードは0000」とか「忘れた」とか「大文字小文字どころか半角全角の区別もわかんない」みたいな人多いんですよ。
若い人が多いから特に。
ということで今回は「携帯の簡単ログイン機能ってどうすれば実装してもいいのさ?」ってのを出してみるテストです。
今、問題にされてる簡単ログイン機能に関する問題点は
- 携帯端末のajaxがdomain baseなのでIPアドレスでアクセス出来ちゃうとajaxで抜き取られてしまう
- SoftbankやEmobileでPC接続時に他キャリアの個体識別情報でアクセス出来ちゃう
この2点ですよね。
たぶん。
まず[1]の脆弱性について、ようはIPアドレスでアクセスされた時にサイトにアクセス出来なければいい。
だからVirtualHostでサイトを設定するって対策がありますよね。
というか共有サーバーだと基本的にVirtualHostだし、専用サーバーなら自分で設定してるはずなので変更も可能ですよね。
それだけで防げるのでかなりお手軽。
[2]の問題は
- SoftBankなどのPC接続で携帯と同一のIPアドレスが利用される
- 他社が勝手につけたヘッダー情報まで面倒みてくれない
というのがあって適当な実装だと脆弱性(他者の個体識別情報でアクセス出来てしまう)に繋がる。
対応としては、キャリア判定と個体識別情報の取得部分をちゃんとすればいいじゃね?と思います。
高木さんは専門家なのであやふやな状態(キャリアが公式に発表していない&何してるか分からない)状況で変な事いいたくないからああいった結びになってるのかな、と妄想してます。
個人的な意見としては「簡単ログインつけない」のは現状のユーザーリテラシーでは逆に危険ではないかと思います。
なので、「簡単ログイン危ない!」→「こうすれば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をつけて終わり
(´・ω・`)…使ってていい?
Yiiを紹介とかしてるスライドの紹介 | Yii Framework触るぜ日記(13.5)
4月 26th
なんとなく、yii を紹介してるスライドをいくつかまとめてみる。
スライドでの紹介とか見ると「へぇ~。やってみよっかな」ってなるよね。
なるよね?
Yii Introduction
英語ですが。
ソースコードが少し多めなんで理解を深めるのにどうぞ。
XOOPSのモジュールをYiiで開発
すげぇw
ってか日本語のスライド3つしか見つけられなかった(´・ω・`)
増えてったら逐次たす!多分。
guiのcrudツール”gii” | Yii Framework触るぜ日記(13)
4月 24th
giiはyiiのスキャフォールディングをweb画面上で行おうというもの。
イチイチ、sshで入ってゴニョゴニョしなくてもいい!
各フォームでフィールドにフォーカスするとそれに応じた説明も表示されるし、phpMyAdminでテーブルさわってmodel作り直しなどもweb上からだと気軽に出来ますよね!
ただこのgii、実はまだ正式実装はされていません。
Yii PHP framework 1.1.2からの実装予定らしいです。
今使うにはsvnで最新のtrunkをcheckoutしないとダメです。
えぇ、ガッツリ人柱ですね。
素直に1.1.2をワクテカしておきましょう(・∀・)
あと誰か日本語に翻訳してくれるとハッピーですよね。
エキサイト翻訳との往復は疲れる…
Widget試してみる Yii Framework触るぜ日記(12)
4月 18th
widgetって、何て読むのが正解なんでしょうね?
ゥィジェット?ガジェット?
そういえば、widthはウィドゥスでheightはハイト(ヘイト)・・・ですよね?
さらにさらにaタグのhrefはエイチレフでimgのsrcはエスアールシー。です・・・よね?
さて、今回はwidgetを試してみるテストです。
よくあるviewの共通部分を管理しようというものですよね。
正直、公式サイトにある日本語のポートレットについてのページがエラーになっててよくわかんないですけど。
とりいそぎ書き留めます。
エクステンション使ってみた Yii Framework触るぜ日記(11)
4月 3rd
Yiiにだって便利なエクステンションはあるんだい!
ってコトでいくつか使ってみました。
yii-userエクステンション
これは前に書いたや。
終わり。
ktaiエクステンション
ktai
微妙に使ってます。
というのも、自分で書いた携帯用viewファイル読み込み使いたかったし、SoftBankでのUTF8化に対応してなかったので。。
※SoftBank機だと書き込みフォームをUTF8にしないと絵文字送ってくれない機種などあります。
とか書いたけど携帯用サイトを構築するのに便利な機能が一通り揃ってますよ!
docomo向けにcssをインライン化してくれたり、絵文字に対応、携帯用viewファイルなど。
ただ、一個バグがあって連続した絵文字の表示が出来なかったです。
とはいえ一箇所修正するだけっぽいので自分で直しちゃいましょう。
filters.ktai.Emoji.phpの150行目あたりです。
static public function convert($str)
{
// $regexp = '/\[([ies]:[0-9]{1,3})\]/';
$regexp = '/\[([ies\*]):([\x21-\x7E]+)\]/';
return preg_replace_callback($regexp, array('Emoji', 'convert_callback'), $str);
}
これを下記のように。
static public function convert($str)
{
// $regexp = '/\[([ies]:[0-9]{1,3})\]/';
$regexp = '/\[([ies\*]):([\x21-\x7E]{1,3})\]/';
return preg_replace_callback($regexp, array('Emoji', 'convert_callback'), $str);
}
えぇ。
見て分かるようにアップデートされた際に量指定演算子付け忘れられたダケみたいです。
これで連続した絵文字も無問題になります。
firephp-logrouteエクステンション
firephp-logroute
ログ出力をFirePHPに対応したヘッダーで出すエクステンションです。
いや、別にCWebLogRouteでいいじゃん!って話もあるけど。
上記の携帯エクステンションと一緒に使うとログ部分がSJIS化されずに化けたりしますしね。
使い方はコチラでCoreファイルをDLしてvendorsに保存。
firephp-logrouteエクステンションもDLして保存。
あとはconfig/main.phpのlogの設定をかえるだけです。
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class' => 'ext.shiki.firePHPLogRoute.ShikiFirePHPLogRoute', // "ext" alias points to /protected/extensions
'fbPath' => 'application.vendors.FirePHPCore031.lib.FirePHPCore.fb', // set path to fb.php
),
),
),
これで画面は綺麗なまま、FireBugでログをチェック出来ます。
ヨカッタ(・∀・)
active-data-provider-with-scopesエクステンション
active-data-provider-with-scopes
これ。
前回のNameScopeの時には書かなかったけど、CDataProvidorでNameScopeが使えないという弱点を克服するものです!
まぁムチャすれば出来ないコトもなかったんですが、このエクステンションを使えばより直感的になります。
使い方は…DLしてcompornentsディレクトリにでも放り込んで下さい。
したら、ControllerでCをEに変更するだけです。
例えばCRUDしたIndexアクションの場合は下記のような感じだと思います。
public function actionIndex()
{
$dataProvider=new CActiveDataProvider('Post');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
これのCActiveDataProviderをEActiveDataProviderに変更するだけ。
これでNameScopeを使う準備はOKです。
雰囲気としては
$dataProvider=new EActiveDataProvider('Profile',array(
'criteria'=>array(
'scope'=>array('published'),
),
) );
やっほーい!
便利なNameScopeが更に便利に使えちゃいます!
おまけ:ムリにCActiveDataProviderにsocpeを使うネタ。
$dataProvider=new CActiveDataProvider('Profile',array(
'criteria'=>Post::model()->published()->getDbCriteria(),
) );
何か気持ち悪いよね!

