當前位置: 首頁> 最新文章列表> PHP Session 跨域攻擊防護技巧:Cookie設置、來源驗證與Token機制

PHP Session 跨域攻擊防護技巧:Cookie設置、來源驗證與Token機制

M66 2025-06-22

PHP Session 跨域攻擊的防範措施

在Web應用中,會話(Session)是追踪用戶狀態和存儲信息的重要手段。但由於Web環境的開放性,會話數據容易遭受跨域攻擊。本文將分享PHP中常見且實用的防護技巧,並附具體代碼示例。

1. 設置Cookie安全屬性

Session ID通常保存在Cookie中,為防止跨域攻擊,可通過調整Cookie屬性增強安全性。主要涉及:

  • HttpOnly :阻止JavaScript訪問Cookie,避免通過腳本竊取會話ID。
  • Secure :僅在HTTPS連接上傳輸Cookie,防止中間人攻擊。

示例代碼:

session_start();
<p>// 獲取當前Cookie參數<br>
$cookieParams = session_get_cookie_params();</p>
<p>// 設置安全的Cookie屬性<br>
session_set_cookie_params(<br>
$cookieParams["lifetime"],<br>
$cookieParams["path"],<br>
$cookieParams["domain"],<br>
true, // Secure<br>
true // HttpOnly<br>
);</p>
<p>$_SESSION["username"] = "user123";</p>
<p>session_write_close();<br>

2. 驗證請求來源域名

通過檢查請求的來源域名,確保Session操作只發生在授權域名下,降低跨域攻擊風險。可利用$_SERVER['HTTP_REFERER']實現:

 if (isset($urlParts['host']) && $urlParts['host'] === $allowedDomain) {
    return true;
} else {
    return false;
}

}

// 使用示例
if (validateReferer("example.com")) {
// 執行會話相關操作
} else {
// 非法來源,拒絕訪問或提示錯誤
}

3. 生成並驗證Token防止CSRF

為每個會話生成唯一Token,客戶端請求時攜帶,服務器端驗證Token一致性,防止偽造請求:

// 生成Token
function generateToken() {
    $token = bin2hex(random_bytes(32));
    $_SESSION["csrf_token"] = $token;
    return $token;
}
<p>// 驗證Token<br>
function validateToken($token) {<br>
return isset($_SESSION["csrf_token"]) && $_SESSION["csrf_token"] === $token;<br>
}</p>
<p>// 生成Token並輸出到表單中<br>
$token = generateToken();</p>
<p>echo &#39;<form method="post"> &#39;;<br>
echo &#39;<input type="hidden" name="csrf_token" value="' . $token . '"> &#39;;<br>
echo &#39;<input type="submit" value="Submit"> &#39;;<br>
echo &#39;</form> &#39;;</p>
<p>// 在請求處理處驗證<br>
if (isset($_POST["csrf_token"]) && validateToken($_POST["csrf_token"])) {<br>
// Token有效,執行操作<br>
} else {<br>
// Token無效,拒絕操作<br>
}<br>

總結

通過合理設置Cookie屬性、驗證請求來源域以及採用Token機制,可以有效防護PHP Session的跨域攻擊風險。建議在實際開發中結合具體業務場景,持續關注安全漏洞並及時更新策略,確保用戶數據和隱私安全。