Cookie / Session 就像網站的「身份證」,用來辨識使用者身分。
但如果設定不當,駭客可能利用漏洞竊取或冒用使用者的 Cookie。
常見風險包括:
HttpOnly
,惡意 JavaScript 可以讀取 CookieSecure
,Cookie 可能透過 HTTP 明文傳輸被攔截SameSite
,容易被跨站請求偽造攻擊 (CSRF) 利用人工檢查容易遺漏,因此我們示範如何透過 AI Agent 自動審查 Cookie,幫助開發者快速發現問題。
Set-Cookie
標頭Secure
、HttpOnly
、SameSite
HttpOnly
SameSite
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"));
使用 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);
利用 axios 請求伺服器,取得 Set-Cookie
標頭:
async function collectCookies() {
const res = await axios.get("http://localhost:3000/set-cookie");
return res.headers["set-cookie"] || [];
}
交給 Gemini,請它按照步驟進行:
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();
}
讓 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);
}
})();