Security

A factual description of how Sandbox as a Service isolates workloads and protects account data. Everything below describes what the system does today. Where we do not have something, the last section says so.

Last updated: 22 August 2026

Isolation model

Every sandbox is a dedicated virtual machine with its own kernel, filesystem, memory and network stack — not a container sharing a host kernel with other customers. The isolation boundary is the hypervisor, which matters when you are executing code that a language model wrote and nobody reviewed.

Inside the sandbox

The sandbox image is hardened before any customer code runs:

Inside those bounds, the machine is yours: you can install packages, write files anywhere the sandbox user can write, and make outbound network connections other than SMTP.

Tenant isolation in the control plane

Every operation on a sandbox, an API key, an execution record or a billing record is scoped to the authenticated account in the database query itself — lookups are filtered by user_id server-side. Ownership is derived from your credentials, never taken from client input, so there is no request shape in which passing another account's sandbox id returns their data: it returns a 404.

Entitlement and quota checks (balance, suspension status, concurrent sandbox limit, global capacity) run server-side before anything is provisioned. Internal host details — the underlying machine's id and address — are stored but never returned by the API, and the sandbox's hostname does not carry the machine's private address. We do not claim to hide which cloud platform a sandbox runs on: you have a root-adjacent shell on a machine, and the hardware identifiers a Linux system exposes are readable from inside it. What we do enforce, and verify before a machine is used, is that the sandbox cannot reach the platform's instance credentials, private networks, or our control plane.

API keys

Keys are 24 bytes from the system CSPRNG, prefixed aas_sk_. We store a scrypt hash (N=16384, r=8, p=1, per-key random salt) plus the first 16 characters as a lookup prefix, and verification is a constant-time comparison. The plaintext key is returned exactly once, at creation, and we cannot recover it afterwards. Keys can be revoked from the dashboard at any time and stop working immediately; you can hold up to ten active keys, and each key's last-used timestamp is recorded so you can spot ones you have forgotten about.

Sessions

Browser sessions use an opaque random session id stored server-side in Postgres, delivered in a cookie together with an HMAC-SHA256 signature that is verified in constant time. The cookie is httpOnly (so page scripts cannot read it), SameSite=Lax and Secure in production, and expires after 30 days. Signing out deletes the server-side record, not just the cookie.

Payments

All card data is handled by Stripe. Card numbers are entered on Stripe's checkout, never on our pages, and never reach our servers or our database — we store only a Stripe customer id and our own credit ledger. Stripe webhooks are signature-verified before processing, and processing is idempotent: each event id is recorded once and duplicates are ignored, so a retried webhook cannot credit an account twice. The amount credited is taken from what Stripe reports it actually collected, not from client-supplied metadata.

Transport and browser hardening

The site and API are served over HTTPS only, with Strict-Transport-Security (one year, includeSubDomains) in production. Responses carry a Content Security Policy, X-Content-Type-Options: nosniff, X-Frame-Options: DENY, frame-ancestors 'none', a restrictive Referrer-Policy and a Permissions-Policy disabling geolocation, microphone and camera. Rate limits apply to sensitive endpoints. Every response carries a request id, which is also written to our logs and is the fastest way for support to find your specific request; Authorization headers, cookies and token-like fields are redacted before anything is logged.

Lifecycle guarantees

Sandboxes are not supposed to outlive their purpose, and we treat a leaked machine as a security problem as much as a billing one:

Reporting a vulnerability

Send it to security@sandbox-as-a-service.com with enough detail to reproduce: request and response, affected endpoint, the account or sandbox ids involved. We will acknowledge your report and keep you updated. Please give us a reasonable window to fix an issue before publishing it, and while testing, stay within your own account — do not access other customers' data, do not run denial-of-service tests against the platform, and do not use a vulnerability to obtain more data than you need to demonstrate it. We do not run a paid bug bounty, but we will credit you if you want to be credited.

What we do not claim

Security pages tend to imply more than is true, so plainly:

If a compliance requirement on this list is a blocker for you, tell us at info@productivity-boost.com. We would rather know what people need than publish a badge we have not earned.