なぜ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であるため成り済ましに注意する

おすすめ記事

記事・ニュース一覧