なぜPHPアプリにセキュリティホールが多いのか?
【スクリプトインジェクション対策01】セッションクッキーを利用する
PCサイトのセッション管理には必ずセッションクッキーを利用します。セッションクッキーとは有効期限が0の特別なクッキーです。通常のクッキーには有効期限が設定でき,「2008年12月31日までPCに保存する」などの指定ができます。有効期限がないクッキーは通常はブラウザのメモリ上にのみ保存されます。
ブラウザが使用しているメモリ上に保存されるので,ブラウザを終了させるとセッションID情報も削除されます。共有PC等を利用した場合でも,ユーザがログアウトしなくても,ブラウザを終了すればセッションIDはPC上からなくなります。
セッションクッキーを利用せずに,有効期限が1日や2日などの“非常に長い”期間を設定し,サーバ側でも同様に長いセッション有効期限を設定していると,ログインした共有PCなどからセッッションを不正利用される可能性が高くなります。
このほかにも,PCの時計が間違っている場合にはログインできなかったりする問題も発生します。時計のズレを解消できるように有効期限の長いセッション有効期限を設定してはなりません。自動ログインの実装に長いセッション有効期限を利用してはなりません。自動ログインの実装についてはこの連載で後ほど解説予定です。
携帯サイトの場合,クッキーが利用できない端末(携帯電話)も少なくありません。セッションIDの変わりに端末ID(各携帯キャリアが電話機を一意に識別ために付与しているID)が利用できます。端末からサーバまでの通信経路の信頼性が保証できるのであれば端末IDをセッションIDの変わりに利用しても問題ありません。しかし,端末からサーバまでの通信経路の信頼性が保証できない場合,無条件に端末IDを信頼すると,携帯電話以外のクライアントから送信された不正な端末IDの利用を許してしまいます。非公式サイト等を構築する場合は成り済ましに注意が必要です。
対策のまとめ
- PCサイトのセッッション管理には必ずセッションクッキーを使用する
- ユーザには出来る限りログアウトを勧める
- 自動ログインの実装にセッション管理用のクッキーを利用しない
- 携帯電話の端末IDは固定IDであるため成り済ましに注意する
補講
- 【スクリプトインジェクション対策19】ユーザを教育する
- 【スクリプトインジェクション対策18】ログイン処理を正しく実装する
- 【スクリプトインジェクション対策17】パスワードを正しく管理する
- 【スクリプトインジェクション対策16】関連するサイトが利用しているドメイン名の一覧を提供する
- 【スクリプトインジェクション対策15】JavaScriptが無効なクライアントでも利用可能なサイトにする
- 【スクリプトインジェクション対策14】HTML,CSS,JavaScriptの生成はホワイトリスト方式を利用する
- 【スクリプトインジェクション対策13】不正な文字データを保存できないようにする
- 【スクリプトインジェクション対策12】データベースなど,内部データを信用しない
- 【スクリプトインジェクション対策11】エスケープしてはならないデータ以外はすべてエスケープする
- 【スクリプトインジェクション対策10】すべての入力値を可能な限り厳しい条件で検証する
-
Webアプリセキュリティ対策入門〜あなたのサイトは大丈夫?
本書は,Webサイトのセキュリティ確保のために必要な基礎知識と,安全なコードを書くために必要な基礎知識を解説しています。Webアプリケーションは比較的簡単に作成で...
-
はじめてのPHP言語プログラミング入門
Webアプリケーション構築ツールとしてPHPを取り上げた書籍は数多くありますが,言語の解説・入門書としての書籍はあまりありません。 本書は,プログラミング言語として...

