Files
pokemon-inventory/docs/SECURITY.md
T
fragginwagon c728016dec feat: establish auth listing and image vertical slices
Includes MFA-capable authentication, session and CSRF security, password recovery, listing lifecycle and ownership rules, inventory image metadata, local ImageStorage, migrations, tests, and implementation status documentation. Verification: npm test (62 passing) and integration suite (14 passing).
2026-09-08 17:32:03 -04:00

2.0 KiB

Security

Authentication

MVP:

  • email/password
  • MFA using TOTP or passkey-capable architecture
  • password recovery
  • remember-me option
  • configurable session expiry
  • active session/device management
  • revoke one or all sessions

Use secure server-side sessions with:

  • HttpOnly
  • Secure in production
  • appropriate SameSite policy

Never store auth tokens in localStorage.

Authorization

MVP has Admin role.

Design authorization so future roles can be added without rewriting domain logic.

All authorization is enforced server-side.

CSRF

Implement an appropriate CSRF defense for cookie-based authentication.

Input and API security

  • Validate all inputs.
  • Parameterize database queries through Drizzle.
  • Allowlist sort fields.
  • Apply pagination.
  • Rate-limit sensitive/auth endpoints.
  • Use security headers.
  • Do not leak private fields through serialization.

Upload security

  • Validate MIME type and file signatures where practical.
  • Limit size and dimensions.
  • Limit image count.
  • Process in controlled jobs.
  • Treat filenames as untrusted.
  • Do not execute uploaded content.

Sessions

Suggested fields: id, user_id, session_token_hash, created_at, expires_at, last_activity_at, ip_address, user_agent, revoked_at

MFA

Suggested fields: id, user_id, type, secret_reference, name, is_enabled, created_at, last_used_at

Secrets must be stored using appropriate secret protection; do not expose raw MFA secrets in logs.

Security audit log

Separate from inventory activity.

Events include:

  • LOGIN_SUCCESS
  • LOGIN_FAILURE
  • PASSWORD_RESET
  • MFA_ENROLLED
  • MFA_FAILURE
  • SESSION_CREATED
  • SESSION_REVOKED
  • ACCOUNT_UPDATED

Secrets

Credentials, API keys, database URLs, and encryption secrets belong in environment/secret management, never in source control.

Privacy boundary

Private:

  • acquisition data
  • sale data
  • buyer information
  • profit
  • internal notes
  • inventory IDs
  • provider observations and errors
  • pricing methodology/confidence/history
  • activity/audit logs

Public data must be exposed through purpose-built DTOs.