在前一章我們模擬了 Webhook 被駭客隨便呼叫的場景。這裡的第一道防線,就是「加上 API Key 驗證」。這能確保只有合法的請求,才會進到你的 workflow。
新增一個 Webhook 節點
http://your-n8n-domain/webhook/hello
在 workflow 開頭加一個 Function 節點
const apiKey = $json.headers["x-api-key"];
const validKey = $env.API_KEY;
if (apiKey === validKey) {
return [
{
json: {
statusCode: 200,
responseBody: {
message: "Authorized request",
body: $json.body
}
}
}
];
} else {
return [
{
json: {
statusCode: 401,
responseBody: {
error: "Unauthorized",
message: "Invalid API Key"
}
}
}
];
}
在 n8n 的環境設定檔(docker-compose.yml
或 .env
)加入:
API_KEY=supersecret123
curl -X POST "https://your-n8n-domain/webhook/secure-endpoint" \
-H "x-api-key: supersecret123" \
-H "Content-Type: application/json" \
-d '{"prompt":"Hello World"}'
curl -X POST "https://your-n8n-domain/webhook/secure-endpoint" \
-H "x-api-key: supersecret123" \
-H "Content-Type: application/json" \
-d '{"prompt":"Hello World"}'
→ 401
curl -X POST "https://your-n8n-domain/webhook/secure-endpoint" \
-H "x-api-key: supersecret123" \
-H "Content-Type: application/json" \
-d '{"prompt":"Hello World"}'
→ 成功被觸發
API Key 驗證雖然簡單,但已經能防住大部分「隨機掃描 / 測試」的攻擊。後面我們還會加上更嚴格的防線(像是簽名驗證、Rate Limiting、IP 白名單),讓 n8n webhook 更難被攻破。