Security
Control who can release a model and what its code can access.
Workbook code runs apart from the API and the components that hold data or credentials. Separate roles govern who can change a model and approve its release. Data policies determine which calculation records are retained. Assess these boundaries alongside the identity, isolation and release controls below.
Customer-hosted security boundary
Keep models and calculation data in your installation.
The application, model publishing, calculations and persistent records can run on infrastructure your team operates. Publishing and running a model do not require transferring the workbook or calculation request to an XSheet-operated service.
-
Infrastructure under your control
Your team manages networking, identity configuration, secrets, data location, backups and recovery. It controls log access and connections to monitoring or SIEM tools. Support access and diagnostic sharing are agreed with you.
-
Explicit network requirements
Local execution and full network isolation are different requirements. Review configured identity providers, signed software delivery and operational services before accepting a no-internet requirement.
Customer-hosted deployment does not transfer responsibility for the software to your infrastructure team. XSheet maintains the isolation, application security controls, dependencies and signed release process. Agree vulnerability handling, security-update delivery and advisory procedures during the vendor review.
Access
Enterprise sign-in, with an explicit account boundary.
Every account starts from an invitation, whichever way its owner signs in. Systems call the API with keys that work in one environment only.
-
Single sign-on over OpenID Connect
People sign in through configured Okta, Google Workspace or Microsoft Entra ID, using OpenID Connect with the authorization code flow and PKCE. Entra is restricted to your tenant and Google to the domains you allow. With Okta and Entra, configured groups or app roles determine the role of an existing account.
-
Accounts by invitation only
There is no public sign-up, and single sign-on will never create an account by itself: an account exists only once someone accepts an invitation. Local accounts need a password and a code from an authenticator app at every sign-in, and repeated failed attempts lead to a lockout. Approvals, break-glass and role changes ask for the identity check again.
-
Roles and approvals
Roles separate viewers, developers, releasers, administrators and auditors. Auditors can review models, call records, the audit log and evidence without changing them. Payload visibility follows the environment’s data policy and the auditor’s permissions. An account created or given a higher role in the last 72 hours does not count toward the approvals a promotion needs without a second administrator.
-
Scoped API keys
API keys are shown once, stored only as a keyed hash and checked in constant time. Each key belongs to one environment and carries its own scopes, services, rate limit, daily quota, allowed networks and expiry, and the application shows the expiry status of each key. A key can be rotated with a grace period or revoked at once. A network that keeps sending refused requests is turned away before any key is read.
Standards
Built around published standards.
XSheet uses published standards and maintained libraries wherever they exist. Your security team can review the design against references it already knows.
| Area | What XSheet follows |
|---|---|
| Single sign-on | OpenID Connect Core and the authorization code flow with PKCE (RFC 7636) |
| Second factor | Time-based one-time passwords (RFC 6238) |
| Application security | OWASP ASVS level 2, the OWASP Top 10 and the OWASP API Security Top 10 |
| API contract | OpenAPI 3.1 with JSON Schema 2020-12, and HTTP semantics (RFC 9110) |
| Errors | Problem details for HTTP APIs (RFC 9457) |
| Request tracing | W3C Trace Context (the traceparent header) |
| Cryptography | Argon2id for passwords, HMAC-SHA-256 for API keys, AES-256-GCM for authenticator secrets and SHA-256 for the audit chain |
| Software supply chain | Planned for tagged releases: SLSA build provenance and a CycloneDX software bill of materials |
| Accessibility | WCAG 2.2 AA and the WAI-ARIA Authoring Practices |
These are design references and technical controls. They do not constitute a certification, an attestation or a completed security audit.
Execution
Safe code, isolated calculations.
A workbook is untrusted input. XSheet processes and runs it apart from everything that holds data or secrets.
-
Built not to crash
Every input has a numeric limit, memory use is bounded and every input and output operation has a timeout. Going over a limit returns a clear error, and the platform keeps running.
-
Isolated execution
Workbook calculations never run inside the API. Each version runs isolated, with no network or file access and strict limits on memory and time. A failure becomes a clear error for the caller, and every other service keeps running.
-
Isolated builds
An uploaded workbook is processed apart from the platform’s data and secrets, without network access. The platform never relies on that processing’s own report of what it produced.
Releases
Signed releases from a pinned supply chain.
Each release is built once, tested, signed and verified before it is installed.
-
Signed releases
Every release is signed only after its tests passed, and runs on XSheet’s own installation first. A customer installation accepts only releases XSheet signs after their exact images ran there. Before installing anything, the updater verifies the signature, and it rolls back automatically when an update fails.
-
Supply-chain checks
Dependencies are pinned and checked against a license allowlist and known vulnerabilities, and every change is scanned for secrets before it is merged.
Data protection
Call data protected in every environment.
Inputs can hold personal data, so each environment decides what its call history keeps. Development environments never see production data.
-
Masked, encrypted call history
Each environment keeps full inputs and outputs, masked ones or metadata only. In production, inputs and outputs are kept for 30 days by default, encrypted and masked in display and export, while request IDs, metadata and receipts are kept for ten years by default.
-
Erasure and legal hold
Planned: on request, erase a data subject’s call inputs and outputs so the running service can no longer read them, while request IDs, metadata and receipts stay for their retention period; and legal holds that block the deletion of the records they cover, approved through maker-checker.
-
An audit chain without personal data
The tamper-evident audit log’s hash chain holds no personal data. Names, email and IP addresses are kept apart from it and anonymized when their retention ends, without breaking its proof of integrity.
This website
No cookies, no scripts, nothing loaded from other sites.
This website sets no cookies, runs no scripts and loads nothing from other sites. It is delivered with a strict Content Security Policy.
Reporting
Reporting a vulnerability.
Security contact: contact@xsheet.io.
Describe the issue and how to reproduce it. Do not include real secrets or personal data in a report.
XSheet
See how your model would work as an API.
Discuss the workbook your team maintains and the applications that need its results. Explore integration and deployment in your environment.