Skip to content

How do I make sure an incoming webhook is really from the source?

Open webhook endpoints accept any request. An attacker who knows the URL can feed your flow fake data. HMAC signing in the header is the standard fix, IP allowlist is a second layer.

Try this first

  1. 1Ask the source (Stripe, GitHub, Mollie, Shopify) to enable signing-secret and store the secret in a vault, not in the flow step itself.
  2. 2In the first flow step compute HMAC over the raw body with that secret and compare to the signature header. Mismatch means stop immediately.
  3. 3Use a time window of for example 5 minutes on the payload timestamp, otherwise a leaked old request stays replayable.
  4. 4Where possible add an IP allowlist for known source ranges, especially payment providers that publish their IPs.
  5. 5Log every rejected request separately, that is your early warning someone is guessing or abusing the URL.

When to bring us in

If your source has no HMAC support but sends financial or personal data, we can look at a proxy layer that adds verification.

See also

None of the above fits?

Describe your situation below. We pass your input plus the steps you already saw to our AI and return tailored next-step advice. If it's too risky to DIY, we'll say so.

Who are you?

For the AI question we need your email and company, so we can follow up if the AI gets stuck, and to prevent abuse.

Limited to 2 questions per hour and 5 per day, kept lean so the AI stays useful. For more, contacting us directly works better for you and us.

Or skip the DIY entirely

Our Managed IT clients do not look these things up. One point of contact, a fixed monthly price, resolved within working hours.