說明
Set-Cookie
缺少 HttpOnly / Secure / SameSite。import express from "express";
const app = express();
app.use(express.json());
// 模擬登入 API:弱密碼 + 沒有 MFA + 不安全 Cookie
app.post("/login", (req, res) => {
const { username, password } = req.body;
// 沒有檢查密碼強度
if (username === "admin" && password === "123456") {
res.setHeader("Set-Cookie", "sessionId=abcd1234");
// 缺少 HttpOnly / Secure / SameSite
return res.send("登入成功 (示範不安全配置)");
}
return res.status(401).send("帳號或密碼錯誤");
});
app.listen(3000, () => {
console.log("不安全伺服器啟動:http://localhost:3000");
});
import fetch from "node-fetch";
import "dotenv/config";
import { GoogleGenerativeAI } from "@google/generative-ai";
// === 初始化 Gemini ===
const API_KEY = process.env.GEMINI_API_KEY;
const genAI = new GoogleGenerativeAI(API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const apiUrl = "http://localhost:3000/login";
const payload = { username: "admin", password: "123456" };
async function collectResponse() {
const res = await fetch(apiUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
return {
status: res.status,
headers: res.headers.raw(),
body: await res.text(),
};
}
async function analyzeWithGemini(serverResponse) {
const prompt = `
你是一個資安檢測 AI,請依照以下格式檢查伺服器回應:
問題 → 具體的安全問題
原因 → 為什麼這是安全風險
修正建議 → 如何修正
伺服器回應內容:
${JSON.stringify(serverResponse, null, 2)}
`;
const result = await model.generateContent(prompt);
return result.response.text();
}
async function main() {
const response = await collectResponse();
const report = await analyzeWithGemini(response);
console.log("=== AI 安全檢測報告 ===");
console.log(report);
}
main();