【PHP】セッションを悪用されないための対策
始めに
対策なしでセッションを使っていると、運営の見えぬ場所でアカウントの不正ログインが発生したり個人情報が漏れてしまう可能性も高いです。
その為、セッションは安心。なんて思ってはいけません。
この記事では、セッションの仕組みから悪用のされ方、対策までご紹介します。
セッションの仕組み
まず、セッションの仕組みを知っていなければ対策をすることはできません。
まず、ユーザーが初めてサイトにアクセスするとサーバー側はセッションIDをCookieに保存するようブラウザに指示します。
その後のアクセスでサーバーはブラウザから送られてきたCookieのセッションIDを確認しそのセッションIDに保存されているデータを利用します。
これが基本となります。
ですが、このままの仕組みであると悪用されてしまいます。
どう悪用されるのか
先ほど、「その後のアクセスでサーバーはブラウザから送られてきたCookieのセッションIDを確認しそのセッションIDに保存されているデータを利用します」と説明しましたが、ここが問題の場所です。
この状態で、簡単に言えば、「自分のセッションIDを他人のセッションIDに書き換えれば他人のデータにアクセスできてしまう」ということです。
つまり、ブラウザがサーバーに他人のセッションIDを送ればそのセッションIDでサーバーが処理してくれるというわけです。
仕組みはとっても簡単なので簡単に悪用されてしまいます。
ですが、対策もとっても簡単です。
対策
対策を一言でいえば、「セッションIDをアクセスするたびに置き換える」です。
アクセスするたびに置き換えれば盗まれてもデータにアクセスできないので、不正ログインもできなくなります。
そして、嬉しいことにPHPではたった一つの関数でその処理を行うことができます。
その関数はこちらです。
(TRUE|FALSEは変更した前のセッションを削除するかしないかです。する場合TRUEになります)
この関数ではセッションIDを変更するだけでなく前のセッションデータも引き継いでくれるのでとても万能な関数です。
ですが、この関数が呼び出された後のスクリプトに影響しますので、通常であればsession_start()の直後に呼び出すのがよいでしょう。
アクセスするたびに置き換えれば盗まれてもデータにアクセスできないので、不正ログインもできなくなります。
そして、嬉しいことにPHPではたった一つの関数でその処理を行うことができます。
その関数はこちらです。
session_regenerate_id(TRUE|FALSE);
(TRUE|FALSEは変更した前のセッションを削除するかしないかです。する場合TRUEになります)
この関数ではセッションIDを変更するだけでなく前のセッションデータも引き継いでくれるのでとても万能な関数です。
ですが、この関数が呼び出された後のスクリプトに影響しますので、通常であればsession_start()の直後に呼び出すのがよいでしょう。
最後に
※PHPのバージョンが古いと関数が動かない可能性もあるので注意しましょう。
この関数は非常に便利ですが、この関数だけでは防げない部分もあります。
もちろん自分でセキュリティを強化させるのは必須なので、毎日プログラムを見直しましょう。