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

58 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.