ChargeForms

Security

Last updated: July 1, 2026

Security is treated as a first-class requirement in ChargeForms, not an afterthought. This page summarizes the practices behind both our own infrastructure and the plugin code that runs on your site.

1. Server-authoritative validation

Every rule that matters — conditional field visibility, payment amounts, required-field checks, form restrictions — is re-verified server-side at submission time. Client-side state (a hidden field, a JS-computed total) is never trusted as the final word.

2. Payments

Payment amounts are always recalculated server-side from a form's own configuration, never trusted from the client. Every PaymentIntent is verified against Stripe's own API before an entry is created, with anti-replay protection against reusing a captured payment on a second entry or a different form.

3. File uploads

Uploads are validated via WordPress's own wp_handle_upload(real MIME checking, not just extension matching), plus a hard denylist of executable file types regardless of a form's own configured allowlist.

4. Export safety

CSV exports are hardened against formula/CSV injection — a submitted value starting with =, +, -, or @ is neutralized before being written to the export file, so it can never execute as a spreadsheet formula.

5. Spam protection

reCAPTCHA v2, hCaptcha, and Cloudflare Turnstile are all verified server-side against the provider's own API — a forged client-side token is rejected.

6. Reporting a vulnerability

Found a security issue? Please report it responsibly via Contact rather than a public issue tracker. We aim to acknowledge reports within 48 hours.