Skip to content

[Feature request] HMAC-SHA256 signed webhooks #1

Description

@Mirindi

Summary

IntaSend webhooks currently support only a shared "challenge" body field
and a bearer header token for authentication. Neither provides cryptographic
proof that the request body has not been tampered with or that the sender
has access to the signing key.

Request

Add HMAC-SHA256 request signing to webhook deliveries, matching the
pattern used by other payment providers:

  • Stripe: sends Stripe-Signature header with t=<timestamp>,v1=<signature>
  • WhatsApp Cloud API: sends X-Hub-Signature-256: sha256=<hex>
  • GitHub: sends X-Hub-Signature-256: sha256=<hex>

Merchants should be able to configure a per-endpoint webhook signing secret
in the dashboard. IntaSend would sign the raw request body with HMAC-SHA256
using that secret and include the signature in an X-Intasend-Signature
header (or similar).

Why

  • A leaked bearer token or challenge value allows silent webhook forgery
    with no server-side detection.
  • Industry standard for payment webhook security since at least 2017.
  • Required for SOC 2 and PCI DSS 4.0 compliance posture of customers
    integrating IntaSend into regulated workflows.

Reference implementation

See Stripe's webhook signature verification algorithm:
https://stripe.com/docs/webhooks/signatures

Filed as a downstream requirement from Mirindi/dukabot#295.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions