Files
Cibello-app/docs/12-sakerhet-gdpr.md
T
2026-08-05 19:21:11 +07:00

3.4 KiB
Raw Blame History

Del 12 Säkerhet & GDPR

Konkret checklista (spec §56). Status: implementerat i kod, 🔧 process/deploy-steg. Teknisk hardening-lista per miljö: infrastructure/security/hardening-checklist.md.

Autentisering & åtkomst

  • Lösenord: scrypt (OWASP-parametrar N=2^15, r=8, p=1), unika salter, timingSafeEqual
  • JWT access 15 min; refresh-tokens hashade + roterande; återanvändning revokerar hela familjen
  • Rollmodell user/moderator/admin; admin dubbelkollas mot DB, alla admin-anrop auditloggas
  • Hushållsåtkomst: requireMembership är enda vägen till hushållsdata; roller owner/adult/member/child
  • Rate limiting: 300/min globalt, 10/min på auth
  • Least privilege i DB: separat databas + egen användare med minsta privilegier utan superuser (skript i infrastructure/deployment)

Dataseparation (spec §7, §56)

  • Hälsodata (user_health_profiles) i egen tabell; hushålls-endpoints returnerar ALDRIG medlemmars hälsodata/allergier/mål
  • Individuellt: mål, allergier, smakprofil, måltidshistorik. Delat: lager, lista, plan, matlådor, budget
  • Pseudonymiserat subjectRef till AAMOS aldrig e-post/namn

Samtycke & minne (spec §3233)

  • Separata samtycken: personalization / anonymized_improvement / image_training / health_integration / location_weather / push med grant/revoke-tidsstämplar + audit
  • Minne transparent ("Vad appen vet om mig"), korrigerbart, pausbart, raderbart; användarrättelser vinner alltid
  • Träningsexport filtrerar på samtyckessnapshot taget VID korrigeringstillfället
  • Ingen hälso-/kostdata till reklam: inga annons-SDK:er; policybeslut D-014

Registrerades rättigheter

  • Export: GET /v1/me/export (konto, profil, preferenser, samtycken, måltider, minne, betyg)
  • Radering: DELETE /v1/me hälsodata/minne/måltider/tokens raderas hårt, kontot anonymiseras
  • 🔧 Backup-retention: raderad data roteras ur backupper enligt policy (30 dagar) dokumenteras i DPA

Applikationssäkerhet

  • Zod-validering på ALL indata; enhetliga felsvar utan stackspår; user enumeration förhindrad vid login
  • Säkerhetsheaders (nosniff, DENY, no-referrer, no-store); CORS låst till kända origins
  • Correlation-ID på varje request → loggar → jobb → AAMOS → audit (spec §58)
  • Idempotens: unika nycklar för butiks-transaktioner; idempotency_keys-tabell för klient-retries
  • Säker filuppladdning: presignade URL:er med HMAC, content-type-krav, 15 MB-tak, nycklar utan användardata
  • Signerad entitlement-token (HS256) med TTL + grace aldrig permanent lokal boolean (§44)
  • Produktionsstart vägrar dev-hemligheter och AAMOS_MODE=mock
  • Mobilen: tokens i SecureStore; inga AI-nycklar i appen (§61.13)

Drift (🔧 vid deploy, se hardening-checklistan)

Egen Linux-user + secrets 600 → senare SSM/Secrets Manager; egen IAM-roll endast mot egen S3-bucket; S3: block public access, SSE, lifecycle (temporary 7d, scans 90d); TLS via reverse proxy på egen domän; backupper: RDS-snapshots + logisk dump före varje deploy (deploy.sh vägrar migrera utan lyckad dump); restore-test kvartalsvis, protokollfört; incidentplan i Del 17.

Kvarstående juridiska uppgifter

🔧 DPA med AWS och AAMOS-driften · 🔧 registerförteckning (art. 30) · 🔧 integritetspolicy + villkor (jurist före TestFlight-extern) · 🔧 DPIA rekommenderas (hälsorelaterad data + profilering) före publik lansering.