Skip to main content

Security

Designed around minimization and explicit consent.

AI Stats avoids raw-content cloud storage by default and keeps every authenticated query scoped to the signed-in user.

Client-side parsing

Large exports are parsed in a browser worker before normalized statistics are uploaded.

No secret storage

Imported URLs, source files, prompts, responses, and local paths are not sent to the server in stats-only mode.

Session security

Better Auth provides password hashing, HTTP-only cookies, CSRF/origin protections, and session revocation.

Share isolation

Public shares read from snapshot records, never live private account tables.

What this design is defending against

Security claims are only meaningful against a stated threat model. AI Stats is built around four concerns: exposure of raw conversation content, one account reading another account’s data, session theft, and a malicious or malformed import file damaging the service or the browser doing the parsing.

The first is addressed structurally rather than procedurally. Because parsing happens in your browser and only normalized statistics are transmitted, a breach of the server cannot disclose prompts, responses, attachments, or file paths. They were never there to disclose. That is a stronger guarantee than any access-control rule, because it does not depend on the rule being enforced correctly every time.

Import safety

Import files are untrusted input. They arrive as archives that may be nested, compressed at hostile ratios, or shaped to look like a format they are not.

  • Parsing runs in a worker thread, off the main thread, so a pathological file degrades one tab rather than freezing the interface.
  • Archive expansion is bounded on every axis: file count, total expanded bytes, single-file size, nesting depth, and the length of an individual record. A compression bomb hits a ceiling instead of memory.
  • Format detection is positive rather than permissive. Unrecognised schemas, including unknown Cursor database versions, are rejected rather than parsed optimistically.
  • Unknown fields become visible warnings in the preview. The parser never invents a metric to fill a gap it did not understand.

Accounts, sessions, and isolation

Authentication uses Better Auth: passwords are hashed with a modern algorithm, sessions live in HTTP-only cookies that page scripts cannot read, and requests are protected against cross-site forgery and unexpected origins. Active sessions are listed in settings and can be revoked individually, which is the correct response to a lost or shared device.

Every authenticated query is scoped to the signed-in user rather than filtered after the fact. Administrative capability is isolated to the owner account and gated separately, not inferred from a flag that a request can influence. There is no public password-reset form, which removes an entire class of account-takeover attempts; recovery is manual and verified against the registered address instead.

Transport and browser hardening

Responses carry a content security policy that constrains where scripts, frames, connections, and workers may come from, along with strict transport security, frame-ancestor and framing denial, MIME sniffing protection, a restrictive permissions policy that switches off camera, microphone, geolocation, payment, and advertising topics APIs, and cross-origin isolation on the opener. Connections are upgraded to HTTPS.

No third-party script loads before consent. Analytics and advertising default to denied, and the advertising library is confined to public content pages, so the signed-in product runs with no third-party code in it at all.

Reporting a vulnerability

Email aistats@novusstreamsolutions.com with security in the subject. Report privately first and allow a reasonable window for a fix. Include reproduction steps and the observed impact, test against your own account, and do not include raw exports, tokens, cookies, or session identifiers in the report. Load testing, denial-of-service attempts, and anything that degrades the service for other users are not authorised.

No system is finished. This page describes current controls, and it is updated when they change rather than on a schedule.