セッション固定攻撃の脆弱性を減らしたいので、ログイン前にsession_regenerate_id()を使用しました。どういうわけか私は今暗闇にあり、以下の質問に対する正しい答えがわかりません:
TRUE
に設定しない場合、古いファイルは削除されません。古いセッションにアクセスできる場合、これは安全ですか?攻撃者は古いセッションを使用してセッションを固定できますか?ログイン前にこの機能を使用する必要がありますか?
パラメータをtrue
に設定する必要がありますか?
セッションの固定を回避する解決策は、単純なセッションIDの変更です。
bool session_regenerate_id([bool $delOldSession = false])
は、現在のセッションIDを新しいものに置き換え、現在のセッション情報を保持します。パラメータtrue
:session_regenerate_id(true)
を追加すると、古いセッションが削除されます。古いセッションを削除しないと、Webアプリケーションがセッションハイジャックに対して脆弱になります。/tmpディレクトリ内に古いが有効なセッションを残します。これの意味は:
古いセッションは常にsession_regenerate_id(true)
またはsession_destroy()
で破棄する必要があります。
ただし、session_regenerate_id(true)
のパフォーマンスに注意する必要があります。最小限の要件は、ユーザーの権限(ログイン、ログアウトなど)を変更するときに使用することです。頻繁に使用すると、セッションで「奇妙な」ことに気づくでしょう。 PHPは、実行中の1つのタスクのみのセッションへのアクセスに制限があります。複数のリクエストがキューに入れられます。リクエストを高速に送信すると、次のようになります。
最初のリクエストはセッションIDを変更し、古いセッションを削除します。
2番目の要求には(まだ)古いセッションIDが含まれており、それに対して何らかの操作を実行しようとします。