n8n Chat Trigger 将生产 webhook URL 硬编码在前端,任何人都能无限制调用;作者构建 ChatFlowGate 网关,通过 HMAC 签名、会话令牌和速率限制保护后端。
这不是 n8n 的 bug——Chat Trigger 就是设计成可以被任意方式调用的,包括直接从浏览器调用。只是说,一个公开页面上的公开聊天机器人在上线前需要有什么东西守护它。我没找到现成的解决方案,所以我自己造了一个:ChatFlowGate。
把你的机器人指向 n8n webhook URL,ChatFlowGate 就成了唯一能接触它的东西。浏览器和 ChatFlowGate 通话;ChatFlowGate 和 n8n 通话。
隐藏的 webhook —— URL 是服务端数据库字段,从不发送给客户端。
签名的、绑定机器人的会话 —— 访问者获得一个 HMAC-SHA256 令牌,作用域限定在一个机器人,24 小时过期,仅在检查过父页面来源与该机器人的域名白名单后才发行。
速率限制 —— 按会话和按 IP 的令牌桶限制,可按机器人调整,从可信代理跳解析,所以伪造的 X-Forwarded-For 无法躲避。
SSRF 防护 —— webhook 目标被 DNS 解析,如果指向 loopback、私有、link-local 或云元数据地址就被拒绝,在连接时再检查一次,而不只是保存机器人时。
垃圾信息陷阱 —— 小部件表单中的隐藏蜜罐字段,真实访问者看不到也没法 Tab 到。机器人填充它们会得到一个看起来正常的响应,然后什么都不会发生:没有 webhook 调用,没有计费。
无消息存储 —— 聊天文本从不写入数据库。每个会话一行记录 IP、粗颗粒位置、浏览器/OS 和消息计数。这就是全部分析数据。
流式传输 —— n8n 的回复(NDJSON、SSE 或单个 JSON 体)被解析并逐 token 流回小部件。
多租户 —— 机器人、会话和 API 密钥按工作区划分,所以代理机构能从单个账户为每个客户端运行一个机器人,每个指向不同的 n8n 工作流,各有各的品牌。
主页上有个实时演示——一个真实的机器人通过真实的网关,包含速率限制和会话令牌,不是脚本化的模拟:
嵌入只需一个脚本标签:
免费开始,无需卡。还很早期——目前只有少数真实用户——所以如果你用 n8n 搭建,我衷心希望你能试试它,并告诉我缺什么或什么坏了。