← Back to home

Security

Last updated: March 29, 2026

Security is a core part of how Orchid is built, not an afterthought. Here is how we protect your data and your clients' data.

Encryption in Transit & at Rest

All data is encrypted in transit using TLS 1.2+ and at rest using AES-256. API keys and secrets are stored as environment variables, never in code.

Row Level Security (RLS)

Every database table enforces Row Level Security via Supabase. You can only ever read or write data that belongs to your account — even if someone guesses a record ID.

Authentication

Authentication is handled by Supabase Auth with bcrypt-hashed passwords, secure session tokens, and automatic token rotation. We never store plaintext passwords.

Audit Logging

All key actions (invoice creation, payment processing, settings changes) are written to an immutable audit log with timestamps and IP addresses.

Rate Limiting

API endpoints are rate-limited to prevent abuse. AI endpoints allow 20 requests/minute per user. Payment endpoints allow 10 requests/minute.

Input Validation

All API inputs are validated with Zod schemas. Outputs are sanitised before storage. SQL injection and XSS are prevented at the framework level.

Security Headers

Orchid sets the following HTTP security headers on all responses:

  • Strict-Transport-Security (HSTS): max-age=63072000
  • Content-Security-Policy (CSP): default-src 'self'
  • X-Frame-Options: DENY
  • X-Content-Type-Options: nosniff
  • Referrer-Policy: strict-origin-when-cross-origin
  • Permissions-Policy: camera=(), microphone=(), geolocation=()

Report a Vulnerability

If you discover a security vulnerability, please disclose it responsibly by emailing bernard@vgoshinfo.com. We will acknowledge receipt within 24 hours and work to resolve confirmed issues promptly.