All connections are served over HTTPS with TLS. Database connections between the application and MySQL use TLS when certificates are provided. No data is transmitted in plaintext.
The MySQL database uses InnoDB tablespace encryption (AES-256). Uploaded image files are stored with restrictive file permissions: directories are 700 (owner-only access), files are 600 (owner read/write only). Your signature data never leaves your browser.
Uploaded files go through multiple validation layers before being stored:
URL path segments in image retrieval are validated to contain only lowercase hex characters. After constructing the file path, symlinks are resolved and the final path is verified to still be inside the upload directory. Any mismatch is logged and blocked.
All secrets, API keys, and configuration values are read from an environment file (keys.env) that is git-ignored. No secrets are hardcoded in source code. A keys.env.example file is provided as a template.
If you find a security issue, email info@carpathian.ai. We take every report seriously.