Security
Last updated: 2026-06-02
Your documents are sensitive data. Here's how we protect them. This document is honest - it describes the real state of things, not marketing.
Encryption
- In transit: TLS 1.2+ on every connection between frontend, API, background workers, and DB. HTTPS on all public domains. Certificates auto-renew via Let's Encrypt.
- Passwords: stored as bcrypt hashes (standard work factor). We have no access to plaintext passwords - not even in the database.
- API keys and secrets: stored only as environment variables on the production server, never committed to git history or source code.
Infrastructure
- Hosting: Hetzner Online GmbH, European Union (Germany / Finland). Hetzner data centers are ISO 27001 certified.
- Rate limiting on the API via the reverse proxy - protects against brute force and automated abuse.
- Isolation: production is separated from dev/staging; no shared credentials.
Access control
- Production server access via SSH keys only (password auth disabled).
- Staff access to user data is only granted following a user's own support request (e.g., to reproduce a bug).
- JWT auth tokens have a 24-hour TTL - users must sign in again after that.
Dependencies and updates
- Dependencies are pinned (lock files: pyproject.toml, package-lock.json).
- Security updates to libraries are applied at least monthly.
Logging and monitoring
- Structured logs via Loguru.
- Errors aggregated in Sentry - lets us respond quickly to issues.
- Logs do not contain: card numbers, plaintext passwords, or full document content. Only metadata (IDs, timestamps, operation status).
Vulnerability reporting
Found a security bug? Email help@chatscontrol.com with subject "Security". Please don't disclose publicly before we patch. We respond within 48 hours and fix critical issues as quickly as possible.
Questions? Email us at help@chatscontrol.com or on Telegram @mrbuslov.