PHP セッションの固定とハイジャック: 予防と緩和
セッションの固定
セッションの固定が発生する攻撃者が意図的にユーザーのセッション識別子を設定した場合。これにより、攻撃者が事前定義された識別子を使用してユーザーになりすますことができるため、セッションのセキュリティが弱まります。セッションの固定を防ぐには:
-
URL でのセッション送信を無効にします: php.ini で session.use_trans_sid を 0 に設定します。
-
次の Cookie を制限します。セッションストレージ: session.use_only_cookies を 1 に設定しますphp.ini.
-
セッション ID の再生成: セッションのステータスが変化するたびに (ログイン後など) session_regenerate_id(true) を呼び出します。
Sessionハイジャック
セッションハイジャック有効なセッション識別子を取得し、それを使用して元のユーザーとしてリクエストを送信する行為です。セッションハイジャックを直接防ぐことは不可能ですが、いくつかの対策によりそれをより困難にすることができます。
-
強力なハッシュ: PHP で session.hash_function を SHA256 や SHA512 などの強力なアルゴリズムに設定します。 ini.
-
ハッシュ ビットを増やす: セットsession.hash_bits_per_character を 5 に設定すると、セッション ID の推測がより困難になります。
-
エントロピーの包含: session.entropy_file を /dev/urandom に設定し、session.entropy_length を a に設定して、セッション ID にエントロピーを追加します。適切な番号。
-
カスタムセッション名: session_name() を使用してセッション名をデフォルトの PHPSESSID から変更します。
-
Rotation: セッション ID を定期的にローテーションして、攻撃者のセッション期間を短縮します。
-
ユーザー エージェントチェック: ユーザーのブラウザ エージェントを含める($_SERVER['HTTP_USER_AGENT']) をセッション内で確認し、後続のリクエストで確認します。
-
IP アドレス追跡: ユーザーの IP アドレス ($_SERVER['REMOTE_ADDR']) を保存しますセッションを確認し、後続のリクエストと照合します。
-
トークン比較: セッション側とブラウザ側の両方のトークンを生成します。リクエストごとにトークンをインクリメントして比較します。
セッションの再生成
session_regenerate_id(true) を使用してセッション ID を再生成すると、古いセッション データも無効になります。したがって、セッションのステータス変更が発生した場合は、このアクションで十分です。
セッションの徹底的な破棄
セッションを終了するときは、session_destroy() ではなく destroySession() を使用して徹底的に破棄します。ブラウザとサーバーの両方からすべてのトレースを削除します:
function destroySession() {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params['path'], $params['domain'],
$params['secure'], $params['httponly']
);
session_destroy();
}
ログイン後にコピー
以上がPHP セッションの固定化とハイジャックを防ぐにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。