携帯でuse_trans_sidを使ったセッションの扱い 後編

By nakayama - 08/11/14 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

前編で紹介した「use_trans_sid」を使ったセッション保持を行なうと、
いわゆるセッションハイジャックといわれるセキュリティ攻撃に脆弱になります。

携帯の場合だとURLにセッションIDを付けている状態で
他人にそのURLをメールで送信&掲示板に投稿してしまうなどの状況が十分考えられ、
システム側セッションハイジャックに対する予防処置が必要になってきます。


セッションハイジャックに関する対応策としては以下の2つが上げられます。

1. cokkieが使える端末はcokkieを使う。

3キャリアですとdocomoはcokkieが使えない。au、softbankは最新の機種ではほぼ使えます。
docomoでのアクセスの場合だけ use_trans_sid の機能を使うと良いでしょう。

■Zend Frameworkを使った場合

//携帯情報取得PEARライブラリ読み込み
require_once('Net/UserAgent/Mobile.php');
$agent = Net_UserAgent_Mobile::factory(); 

if($agent->isDoCoMo()) {
//ドコモの場合
    $sessionConfig = array(
       'use_only_cookies' => 'off',
       'use_trans_sid'    => '1',
   );
}else{
//ドコモ以外
   $sessionConfig = array(
       'use_only_cookies' => 'off',
       'use_trans_sid'    => '0',
   );
}
$session = Zend_Session::setOptions($sessionConfig);

2. セッション情報に端末の情報を保存しておき、異なる端末からのアクセスの場合はセッション無効化

端末のユーザーエージェントか可能であれば個体識別番号、iモードIDの端末の一意の情報をセッションに保存しておいて、
違う端末情報でアクセスされた場合は無効化。
キャリアから発信するIPでも制限を掛けておくと尚ベターです。

session_regenerate_id 関数を使う方法も他のサイトでは紹介されていますが、
途中で通信が切れたり、端末の「戻る」ボタンを使うとセッションが切れてしまい
さすがに使い勝手が悪くこの方法は疑問です。