Skip to main content

Security questionnaire

Security questionnaire answers for ECCTA pilot review.

Use these answers for a first-pass security and procurement review. They describe current product controls and implementation evidence; DefenceFile is not certified; controls documented here still need customer deployment evidence before production reliance.

Evidence boundary

Question count
8 standard answers
Evidence map
Committed internal doc
Certificate posture
Not certified; controls documented
Disclosure route
/.well-known/security.txt

Answers

Standard security review topics, mapped to implementation evidence.

Each answer is intentionally bounded. Customer-specific provider names, regions, support commitments, restore evidence, and legal terms belong in signed deployment artifacts.

Authentication and authorisation

How are users authenticated and authorised?

Configured pilot workspaces use signed `defencefile_session` cookies for authenticated routes. The cookie is HttpOnly, SameSite=Lax, path-scoped to `/`, and forced Secure when Postgres pilot persistence is configured.

Authenticated API contexts carry tenant, organisation, user, and role metadata. Mutating browser requests reject cross-origin submissions before workspace mutations are accepted.

Production pilot readiness requires generated session secrets and named pilot users with allowed roles; short or placeholder secrets keep `/api/health` from reporting ready.

Evidence mapped internally

  • README auth/session notes
  • docs/security-privacy.md
  • src/server/auth/session-token.ts
  • src/server/auth/api-context.ts
  • src/server/ops/deployment-readiness.ts

Evidence data protection

How is evidence data protected?

The product is designed to keep original source files in private tenant-scoped object storage while the application database stores metadata, processing state, hashes, and redacted extracted text.

Postgres pilot readiness requires S3-compatible evidence storage configuration before source evidence is accepted for a configured deployment.

Provider, region, transfer, and storage-encryption details are customer-specific deployment evidence and should be named in signed DPA or order-form artifacts.

Evidence mapped internally

  • README evidence storage notes
  • docs/security-privacy.md
  • docs/deployment-checklist.md
  • src/server/ops/deployment-readiness.ts
  • src/server/storage/evidence-storage.ts

Tenant isolation

How is tenant isolation enforced in Postgres deployments?

Tenant-owned Postgres tables include `tenant_id`, enable and force row level security, and use tenant-isolation policies tied to the current tenant context.

Repository adapters set tenant context before tenant-owned reads and mutations. The security gate checks migrations for missing forced row-level-security coverage.

This is implementation evidence, not customer acceptance evidence; a deployed pilot still needs its database migration and health proof attached.

Evidence mapped internally

  • migrations/0001_pilot_foundation.sql
  • migrations/0005_product_events.sql
  • src/server/db/postgres-rls.ts
  • src/server/db/postgres-workspace-repository.ts
  • src/server/security/hardening-checks.ts
  • src/server/db/schema.test.ts

Token handling

How are public tokens handled?

Zero-login attestation links and adviser-share links are scoped, expiring, and stored as HMAC or SHA-256 token hashes rather than raw bearer tokens.

Repeated invalid public-token attempts are rate-limited by token and source buckets; Postgres attempt rows store purpose, token hash, source hash, attempts, and lockout timestamps.

Audit CSV and telemetry paths are designed to avoid raw public bearer tokens and raw source addresses.

Evidence mapped internally

  • src/server/security/attestation-tokens.ts
  • src/server/security/board-pack-share-token.ts
  • src/server/security/public-token-attempt-limiter.ts
  • src/server/security/postgres-public-token-attempt-store.ts
  • migrations/0001_pilot_foundation.sql

Backup and restore

What is the backup and restore posture?

The local backup runbook covers Postgres dump creation, evidence-object sync, restore confirmation, object-before-Postgres restore ordering, and manifest output.

Postgres readiness requires backup directory, evidence bucket, and verified backup tooling before relying on pilot backup and restore runbooks.

Production backup restore success remains external field evidence; local command wiring does not prove cloud IAM, provider snapshots, restore latency, or customer acceptance.

Evidence mapped internally

  • docs/backup-runbook-proof.md
  • docs/deployment-checklist.md
  • src/server/ops/backup-runtime.ts
  • src/server/ops/backup-rehearsal-map.ts
  • src/server/ops/deployment-readiness.ts

Retention

What are the default retention boundaries?

Pilot defaults retain source evidence for the agreed pilot term plus 30 days, email delivery metadata for 90 days, stale attempt rows after `ATTEMPT_CLEANUP_RETENTION_DAYS`, and backups for 35 daily plus 6 monthly copies unless signed terms say otherwise.

Redacted evidence text, audit events, and export metadata follow workspace retention through the pilot term and any agreed legal hold.

Final deletion, return, legal-hold, DPIA, appropriate-policy-document, support, and subprocessor terms belong in signed customer documents.

Evidence mapped internally

  • README retention notes
  • docs/security-privacy.md
  • docs/privacy-dpa-retention-sync.md
  • src/app/privacy/page.tsx
  • src/app/dpa/page.tsx

Incident and vulnerability posture

What incident and vulnerability-disclosure posture is published?

The runbook lists containment, evidence preservation, secret rotation, tenant scoping, restore decision, and customer notification steps.

The public `/.well-known/security.txt` route points vulnerability reporters to the pilot request route and this questionnaire until a signed customer support route is agreed.

No public bounty, response-time service level, penetration-test report, or third-party certificate is claimed here.

Evidence mapped internally

  • docs/security-privacy.md
  • src/app/.well-known/security.txt/route.ts
  • src/app/security-questionnaire/page.tsx
  • docs/security-questionnaire-evidence-map.md

Browser security headers

What browser security headers are configured?

Global headers include a content security policy with frame and object restrictions, frame denial, MIME sniffing protection, strict-origin referrers, HSTS, and a restrictive browser permissions policy.

The header configuration is covered by an automated test and by the `security:check` gate.

Evidence mapped internally

  • next.config.ts
  • next.config.test.ts
  • scripts/security-hardening-check.ts

Vulnerability disclosure

Published route for first-contact reports.

Security reports should start with the published security.txt contact route until a signed customer agreement names a dedicated support or incident channel.

Open /.well-known/security.txt