Encrypted in transit and at rest
All traffic is encrypted with TLS. The database and file storage are encrypted at rest by our cloud provider, Google Cloud, and the most sensitive values get an extra layer of encryption from PurpletGo itself (see integration credentials below).
Passwords stored only as hashes
Passwords are stored only as bcrypt hashes (cost factor 12), a one-way transformation, so a copy of the database does not contain the passwords themselves.
Customer data separated in the database
Customer data is separated by PostgreSQL row-level security in the database, in addition to checks in the application. Scheduled jobs that work across organizations, such as retention and reminder runs, run under a separate database role reserved for them.
Cut off a compromised account quickly
Changing your password signs out every other session on your account; the session you changed it from stays signed in. You can also review your active sessions and sign any of them out.
Compliance documents stay private
NDAs, exit interviews, and sensitive files are kept in private storage with no public links. Only authorised users can open them, through short-lived signed links that expire.
GitHub connects through OAuth
You authorise GitHub on GitHub itself, so PurpletGo never sees your GitHub password. The resulting access token is stored encrypted like every other integration credential, and you can revoke it from GitHub at any time.
Integration credentials encrypted by the application
API tokens, keys, and secrets for connected apps - Jira, Slack, AWS, and more - and two-factor authentication secrets are encrypted by PurpletGo with AES-256-GCM before they are stored, on top of the cloud provider's encryption at rest. The encryption key is kept outside the database, so a copy of the database alone does not reveal a usable credential.
Protected from automated attacks
Sign-in, registration, and other sensitive endpoints are rate limited, which slows down brute force and credential-stuffing attempts against your team accounts.
Audit trail of changes and key actions
Sign-ins, exports and report downloads, access revocations, document uploads, team changes, and settings changes are recorded with who did what and when. The log covers changes and key actions, not every time data is viewed. Useful for HR disputes, compliance reviews, and security investigations.
Tamper-evident audit log
Audit log entries are chained together with keyed hashes. PurpletGo verifies the chain on request from the audit log page, which detects entries that were altered or removed.
Team and Enterprise
Protected against common web attacks
Content Security Policy and other standard browser security headers are enabled to guard against clickjacking and malicious script injection, and state-changing requests are protected against cross-site request forgery.
Two-factor authentication for every account
Every team member can enable TOTP-based two-factor authentication from their profile. Once enabled, a time-based one-time code is required at sign-in, so a stolen password is not enough on its own.
SAML SSO and SCIM provisioning
SAML SSO lets your identity provider decide who can sign in to PurpletGo. SCIM keeps your employee directory in sync with it and starts an offboarding when someone is deprovisioned.
Team and Enterprise
Network and session controls
Restrict sign-in to your IP ranges, block sign-ins from selected countries, set a session timeout, and sign out every session in your organisation at once.
Enterprise
Audit events to your SIEM
Send audit events to your own SIEM so PurpletGo activity sits alongside the rest of your security monitoring.
Enterprise