iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0
Modern Web

AI 驅動的 Web 資安新時代系列 第 8

Day8 - Cookie / Session 安全:Agent 審查 Secure、HttpOnly、SameSite

  • 分享至 

  • xImage
  •  

為什麼要檢查 Cookie / Session?

Cookie / Session 就像網站的「身份證」,用來辨識使用者身分。

但如果設定不當,駭客可能利用漏洞竊取或冒用使用者的 Cookie。

常見風險包括:

  • 竊取 → 缺少 HttpOnly,惡意 JavaScript 可以讀取 Cookie
  • 攔截/竄改 → 缺少 Secure,Cookie 可能透過 HTTP 明文傳輸被攔截
  • 濫用 → 缺少 SameSite,容易被跨站請求偽造攻擊 (CSRF) 利用

人工檢查容易遺漏,因此我們示範如何透過 AI Agent 自動審查 Cookie,幫助開發者快速發現問題。


AI Agent 分工

  • Cookie 收集模組
    • 從伺服器回應中擷取 Set-Cookie 標頭
  • 屬性檢查模組
    • 驗證是否包含 SecureHttpOnlySameSite
    • 檢查過期時間是否合理
  • 修正建議模組
    • AI 自動生成改善建議
    • 例如如何在 Express / FastAPI 中正確設定 Cookie
  • 安全測試模組(可擴充)
    • 模擬攻擊情境:
      • 嘗試用 JS 讀取 Cookie → 驗證 HttpOnly
      • 嘗試跨站請求 → 驗證 SameSite

Server - 模擬不安全 Cookie

import express from "express";

const app = express();

app.get("/set-cookie", (req, res) => {
  res.cookie("session_id", "12345", {
    // 故意不加 Secure / HttpOnly / SameSite
  });
  res.send("Cookie 已設定");
});

app.listen(3000, () => console.log("Server running on http://localhost:3000"));

AI Agent 審查流程

1、初始化 Gemini

使用 Google Gemini API 作為 AI Agent 的分析核心:

import axios from "axios";
import 'dotenv/config';
import { GoogleGenerativeAI } from "@google/generative-ai";

// 初始化 Gemini,用環境變數讀 API key
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

2、收集 Cookie

利用 axios 請求伺服器,取得 Set-Cookie 標頭:

async function collectCookies() {
   const res = await axios.get("http://localhost:3000/set-cookie");
   return res.headers["set-cookie"] || [];
}

3、使用 Gemini 分析 Cookie

交給 Gemini,請它按照步驟進行:

  1. 檢查缺少哪些屬性
  2. 說明可能的風險
  3. 給出修正建議
  4. 最後只提供一次完整的 Express 範例程式碼
async function analyzeCookieWithAI(cookie) {
   const prompt = `
   你是一個 Web 安全 AI Agent。
   請依照以下步驟分析 Cookie:

   Step 1:檢查結果 → 判斷是否缺少 Secure、HttpOnly、SameSite
   Step 2:風險說明 → 說明每個缺失可能帶來的風險
   Step 3:修正建議 → 簡短描述如何修正 (不用程式碼)
   Step 4:完整程式碼 → 最後只給一次完整的 Express.js 範例

   請避免在 Step 2 或 Step 3 重複貼程式碼,只在 Step 4 提供一次完整程式碼。

   Cookie: ${cookie}
   `;

   // 選擇免費可用的 Gemini 模型
   const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

   const result = await model.generateContent(prompt);
   return result.response.text();
}

4、主流程

讓 AI 分析收集到的 Cookie

(async () => {
   console.log(" 收集 Cookie...");
   const cookies = await collectCookies();

   for (const c of cookies) {
      console.log(`\n Cookie: ${c}`);
      const analysis = await analyzeCookieWithAI(c);
      console.log(" AI Agent 分析:\n", analysis);
   }
})();

上一篇
Day7 - CSP 策略最佳化:由 Agent 自動生成與測試
系列文
AI 驅動的 Web 資安新時代8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言