皆さんはセッションというのをご存知でしょうか。
各クライアント(ブラウザ)に対して、サーバーからセッションIDという一意の識別番号を発行してクライアントに保存することで、個々のクライアントを識別できるようにする仕組みです。
Webサービス上では、ログイン状態の管理や、ユーザー情報の一時保存などによく使われます。
このセッションIDですが、実態はブラウザ側にCookieとして保持されているため、もし何らかの方法で不正に抜き取られてしまうと、場合によってはアカウント乗っ取りなどをされてしまう可能性があります。
このような攻撃を一般的に”セッションハイジャック”と呼びます。
対策としてセッションIDを定期的に変更することで、こういった不正ログインを簡単に防ぐことができます。
具体的には、
“session_regenerate_id()”
関数を実行することで、セッションを維持したままセッションIDを更新することが可能です。
session_regenerate_id() – PHP.net Documentation
例えばこの関数をログインチェック時や、特定、あるいはすべてのページにアクセスされたときに実行されるようにしておけば、万が一セッションIDを盗み出されても、不正ログインされる確率が低くなります。
また、
“session_regenerate_id(true)”
とすると、セッションを切ったうえでセッションIDを再発行できるので、ログイン状態はリセット(ログアウト)されてしまいますが、よりセキュアな状態にすることも可能です。
年々、Webサービスへの攻撃手法が高度化してきていている一方で、アプリの設計などにより基本的な脆弱性が発生してしまうこともまだまだあるようです。
高度な攻撃への対策は高度な知識とテクニックが必要になることもありますが、基本的な対策は知っていればだれでも対策できることも多いので、是非押さえておきたいですね。