携帯サイトのセッションについて調査、web上には古い情報も多く苦労する。
まず、PHPのバージョンについて。現在PHP5がもう主流になっているので、PHP4については忘れておく。ただし、PHP4のバージョンによっては、セキュリティ的に危ないこともあるらしい。(セキュリティ的に注意するのはPHP 4.3.1以前のバージョンで、session.use_trans_sidがTRUEの場合、クロスサイトスクリプティング問題がある。そのほかのバグもあり、セキュリティ的にはPHP4.3.2以降のバージョンを利用するのが望ましい。)
まず、携帯自体の製品サイクルはきわめて早くなってきている。ずっと変えない人もいるだろうが、そのような人はまず、Webサイトを携帯から見るようなことはしないだろう。そのため、それほど古いマークアップ形式にこだわることはない。XHTMLで作成することにする。Web上には3キャリア共通のページ作成に関する情報も多々ある。
携帯と言ってもフルブラウザ対応のiPhoneやandroid携帯ならば、html5で書いておけば良いらしいし、cookieにも当然対応しているだろうので、特別な対応は必要なし。
日本のガラパゴス的携帯については、ユーザー、パスワードの認証形式か固体や契約のIDを利用した簡単認証を行い、それをセッションで管理する。
Docomoの携帯だけが、cookie未対応らしい。そのため、docomo以外では通常のWebサイトと同様に、cookieを利用したセッション維持を行い、docomoだけは、session.use_trans_sidをTRUE、session.use_cookieをFALSEにして、それ以外ではsession.use_trans_sidをFALSE、session.use_cookieをTRUEにする手法もある。
| docomo | au | SoftBank | 全体 | |
|---|---|---|---|---|
| 有効 | 648 (28.0%) | 1710 (99.9%) | 606 (98.7%) | 2964 (63.9%) |
| 無効 | 1667 (72.0%) | 1 (0.1%) | 8 (1.3%) | 1676 (36.1%) |
| 合計 | 2315 (100%) | 1711 (100%) | 614 (100%) | 4640 (100%) |
PHPが携帯サイトに利用される利便性は、PHP自身がセッション管理機能を持っていること。それと、cookie未対応の場合、生成するURLの後ろに自動的にセッションIDを付けてくれる機能があること。
PHPの設定は:
| session.use_trans_sid | セッションが有効な場合、セッションIDをURLに自動で付加する | |||
| session.use_cookies | セッションにクッキーを使用する |
個体識別番号だけでセッションを維持しようとすると、ページを変わるごとに、確認の画面が出ることになってしまうかもしれない。また、個体識別番号は秘密の番号ではないため、偽装が可能である。
Session Fixation:攻撃者が獲得したセッションIDを維持し続け(スクリプトとか、cronで可能)、そのIDをメール等でばらまく。あるユーザーがそのID付きのURLをクリックすれば、そのユーザーのセッションが奪えてしまう。ログインサイトならばログイン後にsession_regenerate_id()、もしくはページ遷移ごとに行うことが有効。IPアドレスをセッションの判定に利用する手もあるが、携帯の場合、IPアドレスが頻繁に変わるので、利用できず。
セッション・ハイジャック:セッションをURLやページ内に書き込んでいると、そのページを他人にメール等で送ったときに、セッションがハイジャックされてしまう可能性がある。 PHPはそのため、ページを遷移するごとにセッションを振り直した方が良い。ただし、この方法だと、携帯での「戻る」が使えなくなってしまう。戻るを利用 すると通信が起きないため、パケット定量性でない場合は節約術の一つになっているが、これが利用できない。なぜなら、保存していたページの内容とは既に セッションIDが変化してしまっているから。もしくは、セッションIDに時間での寿命を付けておく方法もあり。例えば5分間隔で振り直すという方法。その5分間中であれば戻るも利用できる。
| phpメモ< 前 |
|---|
| < 前 |
|---|