Session ID 是用戶身份的關鍵憑證,一旦被竊取即導致會話劫持。主要洩露管道包括:明文傳輸(HTTP)、URL 參數傳遞(瀏覽器歷史記錄)、跨站腳本攻擊(XSS)注入惡意連結。
在 php.ini 中設定 session.use_only_cookies = 1,拒絕 URL 傳遞 Session ID。
在會話啟動時存入標記變數,若發現不存在則重新生成 Session ID:
<?php
session_start();
if (!isset($_SESSION['shili1'])) {
$old_id = session_id();
session_regenerate_id(); // 分配新 Session ID
$new_id = session_id();
$_SESSION['shili1'] = TRUE;
}
?>
將 User-Agent 與隨機種子哈希存入 Session,每次請求驗證:
<?php
define('ua_seed', 'webapp');
session_start();
if (!isset($_SESSION['user_agent'])) {
$_SESSION['user_agent'] = md5($_SERVER['HTTP_USER_AGENT'] . ua_seed);
} else {
if ($_SESSION['user_agent'] != md5($_SERVER['HTTP_USER_AGENT'] . ua_seed)) {
// 驗證失敗,強制重新登入或銷毀會話
session_destroy();
header('Location: login.php');
exit;
}
}
?>
session.cookie_httponly = 1 防止 XSS 竊取 Cookie。session_regenerate_id(true))。會話安全需多層防護:傳輸加密、儲存隔離、身份綁定、異常檢測,才能有效降低風險。