iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
Modern Web

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

Day9 - AI Agent 幫忙清理與強化 HTTP Security Headers

  • 分享至 

  • xImage
  •  

在網站防禦中,HTTP Security Headers 是最基礎、也是最容易被忽略的一環。

常見問題是:

  • 有些 Header 缺失
  • 有些設定太寬鬆
  • 或者有衝突、重複,導致效果打折

這時候就可以交給 AI Agent 來協助:

它可以自動檢測伺服器回應,清理多餘或錯誤的標頭,並建議最佳化的安全組合。

為什麼需要 AI Agent?

  • 人工檢查容易遺漏,AI 可以 快速對比標準清單
  • 自動判斷「強化 vs 相容性」,給出 安全/功能平衡的建議
  • 減少冗餘或錯誤設定,保持配置乾淨、易維護

必備的 Security Headers

  • Content-Security-Policy (CSP) → 防止 XSS、惡意資源

  • Strict-Transport-Security (HSTS) → 強制 HTTPS

  • X-Frame-Options / CSP frame-ancestors → 防止點擊劫持

  • X-Content-Type-Options → 阻止 MIME sniffing

  • Referrer-Policy → 控制來源資訊洩漏

  • Permissions-Policy → 限制瀏覽器功能(麥克風、相機、定位等)

  • Cross-Origin- 系列→ 防止跨來源資源濫用

  • AI Agent 可能的工作流程

    • 1. 收集
      • curl -I 或瀏覽器 DevTools 讀取回應 Header
    • 2. 分析
      • 比對 OWASP / Mozilla Observatory 推薦標準
      • 偵測衝突(例如同時有 X-Frame-Options 與 CSP frame-ancestors
    • 3. 建議
      • 列出缺失(缺少 CSP、缺少 Referrer-Policy)
      • 修正過寬(CSP default-src * → 建議改 'self'
    • 4. 自動修補
      • 產生 nginx / Apache / FastAPI 中可直接套用的配置

Server - 模擬不安全網站

import express from "express";

const app = express();
const port = 3000;

// 範例:刻意用不完整/不安全的 Headers
app.get("/", (req, res) => {
   res.set({
      "Content-Type": "text/html",
      "Referrer-Policy": "strict-origin-when-cross-origin", // 故意設定得不安全
      "X-Powered-By": "Express" // 不應該暴露
      // 其他安全標頭都沒加,方便測試 AI Agent
   });

   res.send("<h1>Hello, Security Test!</h1>");
});

app.listen(port, () => {
   console.log(`測試伺服器啟動: http://localhost:${port}`);
});

AI Agent – 自動檢測與建議

1、匯入套件與設定 API Key

  • node-fetch → 幫我們抓取網站的 Response Headers。
  • dotenv/config → 自動讀取 .env 裡的 GEMINI_API_KEY
  • GoogleGenerativeAI → 官方 Gemini SDK,用來呼叫模型。
import fetch from "node-fetch";              
import 'dotenv/config';                      
import { GoogleGenerativeAI } from "@google/generative-ai"; 

const API_KEY = process.env.GEMINI_API_KEY;
const genAI = new GoogleGenerativeAI(API_KEY);

2、 抓取網站回應 Headers

  • fetch(url) 連線到目標伺服器。
  • 把伺服器回應的 Headers 全部取出,存到物件裡。
const response = await fetch(url);
const headers = {};
response.headers.forEach((val, key) => {
   headers[key.toLowerCase()] = val;
});

3、設定 Gemini 模型

  • 這裡使用 Gemini 1.5 Flash,速度快、適合做即時分析。
  • 也可以改成 gemini-1.5-pro,換成更精細的分析。
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

4、撰寫 Prompt

  • 明確告訴 AI 角色 (Web Security Agent)任務
  • 要求 AI 回答的格式固定成三個部分:缺少、錯誤/過寬、最佳化建議。
  • 這樣可以避免 AI 回答太雜亂。
const prompt = `
你是一個 Web Security AI Agent。
以下是某網站的 HTTP Response Headers:
${JSON.stringify(headers, null, 2)}

請幫我檢查這些 headers 的安全性,並依照以下格式輸出:
1. 缺少的標頭 (列出名稱 + 建議值)
2. 設定錯誤或過寬的標頭 (目前值 vs 建議值)
3. 最佳化後的 Nginx add_header 配置範例
`;

5、呼叫 AI 並輸出結果

  • 呼叫 Gemini API,取得分析結果。
  • 最後把報告印出來,就能看到安全性檢查建議。
const result = await model.generateContent(prompt);

console.log("\n AI Agent 分析報告:\n");
console.log(result.response.text());

上一篇
Day8 - Cookie / Session 安全:Agent 審查 Secure、HttpOnly、SameSite
下一篇
Day10 - API 安全:Agent 模擬攻擊 + 自動生成防護建議
系列文
AI 驅動的 Web 資安新時代10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言