携帯サイトではクッキー(cookie)が使えないため、CGIパラメータでそのセッション管理を行うのが一般的ですが、そのCGIパラメータの漏洩の危険性についてのお話です。
これらのパラメータは主に、リファラー(Referer)という1つ前のページのURLがwebサーバのアクセスログに出力され、第三者に漏洩する危険性があります。
例えば、自サイト以外のサイトにユーザのログイン状態でリンクしている場合などが、この危険性を含むページとなります。
携帯キャリアではDoCoMoの場合、このRefererがアクセスログに出力されない仕様になっています。しかしAU,SoftbankはこのRefererをログ出力してしまいます。また、Softbankは携帯のAgent情報にシリアル番号も出力するため、さらに危険な印象を受けます。(それでどうこうするか浮かびませんが。。)
このため、ログイン情報をCGIパラメータで保持する携帯サイトを開発する際は、Refererにパラメータが漏洩することを前提として設計を行う必要があります。
以下、対策についての考え方です。
1. ログイン時にセッションIDとブラウザAgentをDB(or File)に保持し、ページ表示時に保持された値と現在値を比較する。
→これは、アクセスログのAgent情報を見れば同じAgentを偽装することが容易に可能なのでNG
2. ページ表示時に時間情報をDB(or File)に保持し、次回ページ表示との時間差をチェックしてログイン管理を行う。
→これもアクセスログをリアルタイムでチェックしていれば、即時hack可能なのでNG
3. ログイン時にセッションIDとキャリア情報をDB(or File)に保持し、ページ表示時にアクセス元IPがキャリア提供範囲のものかをチェックする。
→DoCoMo/AU/Softbankは携帯用のGateWayのIP範囲を公開しているので、この制限を設けることは有効。ただしこのIP範囲をメンテナンスするのは結構厄介です。
4. ユーザ識別用パラメータにIP制限を設ける。
→最初にログインしたときのIPアドレスを保存し、ページ表示の際このIPを比較対象とすることは携帯が移動時にIPが変動するためNG。
上記1~4を見ていくと、OpenなInternet網でのセッションIDのみでのセキュリティ対応は困難であると言えます。そのため、以下の方針をお勧め致します。
a. 外部サイトへのリンクは必ずリダイレクト用CGIを経由してリンクさせる。
~/redirect.php?url=***
のようにする。
b. ユーザ情報等の入力ページに遷移する際に認証用ページを1枚設け専用パスワードが合致した場合のみ
入力画面に移動できる。
【結論】
アクセスを簡易化してをアクセスを稼ぐか、セキュリティにビビって利便性が悪くアクセスが少ないサイトにするかは自由だ~