Webhook without signature verification or idempotency
errorwebhook-without-signature-or-idempotency
A webhook is a public endpoint that its caller retries. Without signature verification anyone can post a fake event; without idempotency the provider's own retries apply the same event twice.
- Severity
- error
- Selects
- every node of kind webhook-endpoint
- Components in scope
- 4
It looks at every node of kind webhook-endpoint, and fires when:
- — any of these hold:
- — the node's `signatureVerified` is false
- — the node's `idempotent` is false
Webhook '{{node.id}}' does not verify signatures or is not idempotent. Verify the caller's signature and deduplicate by event id.Reference designs whose broken twin names this rule in its header. The gate reads the same header, and fails when a rule no design trips.
# yaml-language-server: $schema=../schema/rule.schema.json # A webhook is a public endpoint that the caller retries. Without signature verification # anyone can post a fake "payment succeeded"; without idempotency the provider's own # retries apply the same event twice. # Tripped by: designs/payment-system.broken.yaml schemaVersion: "1" type: "rule" id: "webhook-without-signature-or-idempotency" severity: "error" select: node: kind: "webhook-endpoint" when: any: - prop: "signatureVerified" equals: false - prop: "idempotent" equals: false message: "Webhook '{{node.id}}' does not verify signatures or is not idempotent. Verify the caller's signature and deduplicate by event id."