app-creator/domain-packs/ios-app/checklist-security-privacy.md
Kjell Tore Guttormsen 2011507ea1 design(app-creator): S6 — forfatt ios-app referanse-domain-pack + start claude-code-plugin-pakke
- domain-packs/ios-app/: komplett referanse-pakke (8 komponenter) — pack.json med
  components-map, conventions.md, 4 patterns/, gotchas.md, checklist.md splittet i 3
  (App Store-submission + security-privacy/MASVS 2.1 + accessibility/WCAG 2.2 AA),
  3 scaffold/-maler (PrivacyInfo.xcprivacy-plist, NSUsageDescription-inventar,
  ASC-metadata), eksempel-feature-brief i Voyage strict-mode-format, glossary.md.
  Hver teknisk påstand verifisert mot Apple Developer / W3C WAI / OWASP MAS.
- domain-packs/claude-code-plugin/: stub — pack.json + conventions.md + gotchas.md
  + checklist.md + glossary.md ferdige (ekstrahert fra ktg-privat-konvensjoner);
  patterns/scaffold/examples er stubs.
- docs/domain-pack-spec.md: § D2/D3/D4/D7 + restrisiko oppdatert — pack.json
  components-felt, core/supplementary låst til manifestet, checklist-splitt-konvensjon,
  snapshot-materialiserings-mekanikk presisert, iOS-versjons-korreksjon (iOS 26, ikke
  "iOS 18/19"), D7 → "forfattet i S6".
- prototype-run/friksjon.md: #9 (Akashic-briefen refererer "iOS 19" som ikke finnes —
  rettes i S7) + S6-prosessnotater (checklist-splitt bekreftet nødvendig, components-gap
  fylt, verifiserings-asymmetri ios-app vs claude-code-plugin notert).
- CLAUDE.md: peker til domain-packs/ under § Status.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-12 14:06:54 +02:00

43 lines
4.5 KiB
Markdown

<!-- domain-pack: ios-app · component: checklists · core -->
<!-- verified 2026-05-12 against OWASP MASVS 2.1.0 + Apple privacy-manifest / App Privacy docs. -->
# iOS-app — sikkerhet & personvern sjekkliste
OWASP MASVS 2.1.0 (utgitt 2024-01-18) + `PrivacyInfo.xcprivacy` + App Privacy Details. Sub-sjekkliste av `checklist.md`. MASVS definerer *hva* som skal verifiseres; MASTG/MASWE definerer *hvordan* man tester. ([OWASP MASVS](https://mas.owasp.org/MASVS/))
## OWASP MASVS 2.1 — 8 kontroll-grupper
Velg de relevante; en all-local-app uten auth/nett trenger få. Ikke-relevante grupper merkes `N/A` med én linjes begrunnelse i `pack-overrides.md`.
- [ ] **MASVS-STORAGE** — sensitiv data i Keychain (ikke `UserDefaults`/`plist`/klartekst-fil); ingen sensitiv data i logger/backups/snapshots; cache ryddes ved behov.
- [ ] **MASVS-CRYPTO** — kun moderne algoritmer; nøkler i Keychain/Secure Enclave; ingen hardkodede nøkler; tilfeldighet fra `SecRandomCopyBytes`/`CryptoKit`.
- [ ] **MASVS-AUTH** — hvis appen har auth: sikker sesjonshåndtering, biometri som beleilighet ikke eneste faktor, riktig logout/timeout.
- [ ] **MASVS-NETWORK** — TLS på all trafikk (ATS aktiv, ingen ubegrunnede unntak); sertifikat-validering ikke deaktivert; vurder pinning hvis trusselsbildet krever det.
- [ ] **MASVS-PLATFORM** — minimale entitlements/capabilities; trygg IPC (App Groups, URL schemes, universal links validert); ingen sensitiv data i `pasteboard`/skjermbilder uten grunn; deep links validerer input.
- [ ] **MASVS-CODE** — oppdaterte dependencies (kjente CVE-er sjekket); inputvalidering på alt eksternt (deep links, fildelt innhold, push-payloads); ingen debug-kode/test-endepunkter i release.
- [ ] **MASVS-RESILIENCE***kun hvis appen håndterer høyverdi-data*: anti-tampering/jailbreak-deteksjon, obfuskering. For en vanlig konsument-app: vanligvis `N/A`.
- [ ] **MASVS-PRIVACY** *(ny i 2.1.0)* — minimer datainnsamling; vær transparent (purpose-strings, onboarding-forklaring, App Privacy Details); gi brukerkontroll (slett data, trekk samtykke); ingen tracking uten ATT.
## `PrivacyInfo.xcprivacy` — påkrevd siden 2024-05-01
Mal: `scaffold/PrivacyInfo.xcprivacy`. ([Apple — Privacy manifest files](https://developer.apple.com/documentation/bundleresources/privacy-manifest-files))
- [ ] `NSPrivacyTracking` (Bool) — `false` med mindre appen faktisk tracker på tvers av apper/nettsteder.
- [ ] `NSPrivacyTrackingDomains` (Array) — domener brukt til tracking (tom hvis `NSPrivacyTracking = false`).
- [ ] `NSPrivacyCollectedDataTypes` (Array) — hver innsamlet datatype med `NSPrivacyCollectedDataTypeLinked`, `...Tracking`, og `NSPrivacyCollectedDataTypePurposes`. Tom hvis ingenting samles.
- [ ] `NSPrivacyAccessedAPITypes` (Array) — **required-reason-API-kategorier** appen bruker, med tillatt reason-kode. Kategorier inkl.: file timestamp APIs, system boot time APIs, disk space APIs, active keyboard APIs, user defaults APIs (m.fl.). Manglende deklarasjon = App Store-avvisning (Guideline 5.3.4). ([Apple — Required reason API](https://developer.apple.com/documentation/bundleresources/describing-use-of-required-reason-api))
- [ ] **Tredjeparts-SDK-er:** hver må levere sin egen `PrivacyInfo.xcprivacy` (og signatur for noen). Verifiser — ellers blir det din avvisning.
## App Privacy Details ("nutrition label") — App Store Connect
Må stemme med faktisk databehandling i appen *og* alle SDK-er. ([Apple — App Privacy Details](https://developer.apple.com/app-store/app-privacy-details/))
- [ ] For hver relevant kategori (Contact Info, Health & Fitness, Financial Info, Location [Precise/Coarse], Sensitive Info, Contacts, User Content, Browsing/Search History, Identifiers, Purchases, Usage Data, Diagnostics, Surroundings, Body, Other): angitt **om** den samles, **formål** (App Functionality / Analytics / Product Personalization / Advertising / Other), og **om linket til identitet** + **om brukt til tracking**.
- [ ] "Data Not Collected" valgt hvis — og bare hvis — verken appen eller noen SDK samler noe. (Den enkleste posisjonen, og verifiserbar.)
- [ ] Personvern-policy-URL satt hvis noe samles.
## Permission-transparens (GDPR + App Review-forventning)
- [ ] Hver permission (location, notifikasjoner, …) forklart på en onboarding/forklarings-skjerm *før* system-prompten.
- [ ] App fungerer i degradert-men-nyttig modus hvis permission nektes (ingen dead-end).
- [ ] Ingen tredjeparts-AI-/analytics-deling uten at det er deklarert og (der relevant) samtykket.