Security model
Trust boundary
The browser can request and display a TrueSift challenge, but it is not an authority for the protected business action. Only the opaque verificationToken is accepted as client-controlled proof input.
The plugin signs action, path, and origin into a short-lived WordPress context token. PHP validates that signature and sends the resulting server-owned expectations together with the site key, secret key, and verification token to TrueSift's authoritative proof endpoint.
Accepted proof
A normal proof is accepted only when the TrueSift response confirms all of the following:
allowedistrue;decisionisallow;- one-time consumption is confirmed by
consumed: trueor a non-emptyconsumedAt; - challenge ID, action, and origin are present;
- returned action, path, and origin match the signed WordPress context.
Invalid, expired, replayed, mismatched, reviewed, and blocked proofs never use fail-open.
Availability policy
Only the saved server-side fail_open setting or the TRUESIFT_FAIL_OPEN constant can permit a protected action when the proof service is temporarily unavailable. A browser field named failOpen is ignored.
The browser submit control still requires an issued verification token. Therefore a browser challenge or verify failure does not unlock the form merely because server-side fail-open is enabled.
Credentials
- The site key and secret key never appear in frontend configuration.
- The secret key is stored encrypted with Sodium secretbox when available.
- OpenSSL AES-256-GCM is used as a fallback.
wp-config.phpconstants can be used instead of database storage.- Logs never include credentials or complete verification tokens.
- HTTP certificate verification is never disabled.
Reporting a vulnerability
Do not publish security issues in a public support topic. Report them through the security contact listed at:
mailto:info@webdigitech.de