Configuration
Runtime configuration comes from environment variables, with safe deployment defaults when a value is absent.
Security
Deinox applies layered controls to reduce common web risks and protect user interactions. This page describes what those layers are, and how to report something we have missed.
Checking platform status
Technical controls
Each layer runs in this order, and a request has to clear all of them before anything is processed.
Inbound request Any visitor, any origin, trusted or not.
Helmet sets a strict content security policy, blocks framing, and suppresses the referrer on outbound links.
Every IP is metered at the edge, with a tighter window again on the API routes behind it.
Duplicated query parameters are collapsed before they reach a handler, and request bodies are capped.
Submissions arriving from an origin outside the allow-list are refused before any processing happens.
A hidden trap field and submission timing checks screen out automated posts. The parameters stay unpublished on purpose.
Markup is stripped, entities escaped, lengths capped, and every field validated server-side before storage.
Application Only what survives all six layers gets here.
Operational controls
Runtime configuration comes from environment variables, with safe deployment defaults when a value is absent.
Contact submissions are stored as timestamped records, so an enquiry can be traced after the fact.
Failures return a generic response. Stack traces and internal implementation details are never surfaced.
A dedicated security contact is published at a well-known path, so reports never depend on finding the right inbox.
Responsible disclosure
Report it to us before anywhere else, and give us enough to reproduce it. We would rather hear about a problem early than read about it later.
Security contact details are published at the well-known path below.