AuditFlow ← Back to home

Trust & Security at AuditFlow

How we protect customer audit data, who we share it with, and where we are on our independent-assurance roadmap. This page is updated as the underlying controls change — every claim here corresponds to code that ships in our production environment today, unless explicitly marked as roadmap.

What we do today

Multi-factor authentication Live

Time-based one-time codes (TOTP) with single-use bcrypt-hashed backup codes. Compatible with any authenticator app.

Password policy Live

12-character minimum, 3-of-4 character classes, common-password blocklist, and a no-personal-information rule. NIST 800-63B aligned.

Account lockout Live

5-attempt threshold, 15-minute cooldown. Every attempt is logged with IP and user agent and surfaced to tenant admins.

Session timeout Live

30-minute idle timeout, 12-hour absolute cap. Session cookies carry HttpOnly + Secure + SameSite=Lax in production.

Per-tenant IP allowlist Live

Enterprise customers can restrict sign-ins to corporate networks or VPN ranges. Off by default; opt-in per workspace.

Tamper-evident audit log Live

Every privileged action is recorded into an append-only log with a SHA-256 hash chain. Silent DB-level tampering becomes detectable.

Encrypted transit Live

TLS 1.2+ on every endpoint, HSTS with a 1-year max-age, strict Content-Security-Policy, and a deny-by-default permissions policy.

Suspicious-activity alerts Live

Daily digest to the workspace owner when we detect lockouts, IP-enumeration sweeps, or distributed brute-force patterns.

DSAR tooling Live

Self-serve admin export of every field we hold about a user, and one-click anonymisation that preserves history under redacted placeholders.

Application & data security

The technical controls behind every request. All are live in the production environment today.

Credential storage Live

User passwords are hashed with bcrypt (per-credential salt, adaptive work factor). Password-reset, activation, and MFA backup tokens are bcrypt-hashed at rest, so a database leak never exposes a usable secret.

CSRF protection Live

Every state-changing request carries a per-session CSRF token validated server-side (Flask-WTF). Combined with SameSite=Lax cookies, cross-site request forgery is blocked at two layers.

Injection defence Live

All database access uses parameterised queries with bound parameters — user input is never concatenated into SQL. Output is auto-escaped by the template engine to prevent stored/reflected XSS.

Browser hardening headers Live

Deny-by-default Content-Security-Policy, X-Frame-Options: DENY (anti-clickjacking), X-Content-Type-Options: nosniff, a strict Referrer-Policy, and a locked-down Permissions-Policy on every response.

Encryption at rest Live

Tenant data is stored on managed PostgreSQL and encrypted persistent disks with AES-256 encryption at rest. In transit, TLS 1.2+ is enforced end to end with HSTS.

Tenant isolation Live

Every query is scoped to the caller's workspace (account_id). No cross-tenant read or write path exists; a token or session is only ever honoured against the data of the tenant it belongs to.

Rate limiting Live

Sliding-window per-IP rate limits on sign-in, password-reset, account-activation, and resend-activation endpoints throttle credential-stuffing and brute-force attempts before lockout even triggers.

Scoped external links Live

Auditee response and evidence links are unguessable, single-purpose tokens that grant access only to one audit's content — never a login session and never another tenant's files.

Enumeration-resistant auth Live

Sign-in, reset, and activation flows return a single generic outcome regardless of whether the account exists, is locked, or is inactive — so the login surface cannot be used to enumerate valid users.

Secure development & governance

How we keep the codebase and the organisation around it disciplined between releases.

Dependency CVE scanning Live

pip-audit runs in strict mode against the pinned dependency manifest on every push, every pull request, and on a daily schedule — so a CVE disclosed after our last commit is caught within 24 hours.

Static analysis (SAST) Live

A Bandit static-security scan runs over the application code in CI on every change, flagging insecure patterns before they can reach production.

Automated patching Live

Dependabot opens pull requests for outdated and vulnerable dependencies automatically, keeping the supply chain current without waiting on a manual review cycle.

Mandatory code review Live

CODEOWNERS and a security-aware pull-request template enforce review on every change to the main branch. Change management is a documented, repeatable process.

Policies & runbooks Live

Documented change-management, access-review, vendor-risk, asset-inventory and environment-isolation policies, plus operational runbooks for incident response, secrets rotation, backup/DR, and email authentication (SPF/DKIM/DMARC).

Data governance Live

A maintained PII inventory and risk register underpin a Data Processing Agreement mapped to GDPR and the Saudi, UAE, and Egyptian PDPLs. A published disclosure policy gives researchers explicit safe harbor.

Compliance roadmap

We're being transparent: we are pre-revenue on independent assurance reports, and we'd rather show you where we are than overclaim.

SOC 2 Type I 2026 Q3 target

Controls foundation in place — access management, audit logging, change management documented. Auditor selection in progress.

ISO 27001 Following SOC 2

ISMS scope and statement of applicability drafted. Combined gap assessment alongside SOC 2 audit.

Regional hosting On request

Currently single-region. Saudi / UAE / EU data residency available for enterprise tier on request.

Sub-processors

These are the third parties who process customer data on our behalf. We will notify customers of any addition to this list with 30 days' advance notice.

Provider Purpose Data hosted Region
Render Web application hosting + managed Postgres All tenant data at rest US East
OpenAI AI-generated risk / finding / recommendation drafts Audit content sent only when AI features are invoked Multi-region (opt-out of training)
SMTP provider Outbound system mail (activation, reset, distribution) Recipient addresses + message bodies Provider region

Reporting a security issue

If you believe you have found a vulnerability in AuditFlow, please email info@audit-flow.net. We aim to acknowledge within one business day. We do not currently operate a public bug-bounty programme but we credit responsible disclosure in our release notes.