If you've wired up n8n's Chat Trigger and pointed its widget at a public page, open dev tools and check the network tab. Your production webhook URL is sitting right there in the client-side JavaScript. Anyone can copy it and start posting to your workflow directly, from outside your site, with no rate limit and no auth in front of it.
That's not a bug in n8n — the Chat Trigger is built to be called however you wire it up, including straight from a browser. It just means a public chatbot on a public page needs something in front of it before it goes live. I didn't find that something, so I built it: ChatFlowGate.
What it actually does
Point a bot at your n8n webhook URL and ChatFlowGate becomes the only thing that ever touches it. The browser talks to ChatFlowGate; ChatFlowGate talks to n8n.
- Hidden webhook — the URL is a server-side database field, never sent to the client.
- Signed, bot-bound sessions — visitors get an HMAC-SHA256 token scoped to one bot, expiring in 24h, issued only after the parent page's origin is checked against that bot's domain allowlist.
- Rate limiting — token-bucket limits per session and per IP, tunable per bot, resolved from a trusted proxy hop so a spoofed X-Forwarded-For can't dodge it.
- SSRF guard — webhook targets are DNS-resolved and rejected if they point at loopback, private, link-local, or cloud metadata addresses, checked again at connect time, not just when you save the bot.
- Spam traps — hidden honeypot fields in the widget forms that a real visitor can't see or tab to. A bot filling them in gets a normal-looking response and nothing else happens: no webhook call, no charge.
- No message storage — chat text is never written to the database. One row per session holds IP, coarse location, browser/OS, and a message count. That's the entire analytics story.
- Streaming — n8n's reply (NDJSON, SSE, or a single JSON body) is parsed and streamed back to the widget token by token.
- Multi-tenant — bots, sessions, and API keys are scoped to a workspace, so an agency can run one bot per client from a single account, each pointed at a different n8n workflow, each with its own branding.
Try it
There's a live demo on the homepage — a real bot through the real gateway, rate limits and session tokens included, not a scripted mockup:
Embedding is one script tag:
<script src="https://www.chatflowgate.com/embed.js" data-bot="YOUR_BOT_ID" defer></script>
Free to start, no card required. It's early — a handful of real users so far — so if you build with n8n, I'd genuinely value you trying it and telling me what's missing or what breaks.
Top comments (1)
Worth being precise about the threat model here, because the framing undersells your own tool. A visible webhook URL isn't the vulnerability — the missing auth on the endpoint behind it is. Hiding the URL on its own is obscurity; the parts of the gateway that actually do work are the HMAC session token and the per-IP bucket.
The gap I'd close next is cost rather than access. A legitimately issued session can still burn LLM spend at whatever rate the bucket permits, so a per-session token budget separate from the request-count budget is worth adding. Request rate limiting doesn't stop someone pasting a 30k-token message forty times.