docs: update security status in technical documentation for backend and Flutter frontend
Test Suite / test (24.15.0) (push) Has been cancelled

- Added detailed security status section in backend documentation, outlining implemented security features and remaining risks as of 2026-05-07.
- Included security features implemented in Flutter, emphasizing auth-gating, token storage, and limitations regarding web security.
This commit is contained in:
Nils-Johan Gynther
2026-05-07 10:48:35 +02:00
parent 5b1aec6449
commit 943e449c97
3 changed files with 357 additions and 635 deletions
+31
View File
@@ -95,6 +95,37 @@ Detta dokument är skrivet för systemadministratörer och programmerare. Fokus
### Driftnotering
Verifiera efter deploy att seed-körning inkluderar uppdaterat kategoriträd och att kvittoflödet använder den senaste regelbaserade parserlogiken.
## Sakerhetsstatus (2026-05-07)
Denna sektion beskriver sakerhetsfunktioner som ar implementerade i kodbasen och hur de ar implementerade tekniskt.
### Implementerat i backend
- JWT-skydd globalt: `JwtAuthGuard` ar registrerad som global APP_GUARD i `backend/src/app.module.ts`. Alla endpoints kravs pa giltig bearer-token om de inte ar markerade med `@Public()`.
- Rollbaserad access: `RolesGuard` ar global guard och laser metadata fran `@Roles(...)`. Endpoints med adminkrav blockerar icke-admin med `ForbiddenException`.
- Rate limiting: `ThrottlerGuard` ar globalt aktiv med standard 120 anrop/minut. Login/register har hardare throttle (`10/min`) i `auth.controller.ts`.
- Input-hardening: global `ValidationPipe` i `backend/src/main.ts` med `whitelist: true`, `forbidNonWhitelisted: true`, `transform: true`.
Detta tar bort odefinierade falt och nekar payloads med extra fields.
- Security headers: `helmet(...)` ar aktiverat i `backend/src/main.ts` med HSTS, `x-frame-options`, `x-content-type-options`, referrer policy och cross-origin policies.
- CORS-begransning: origin satts via `ALLOWED_ORIGIN` (fallback host i kod) och credentials ar explicit styrda i `main.ts`.
- Losenordshashning: `bcryptjs` med kostnad 12 i `auth.service.ts` (`bcrypt.hash(password, 12)`).
- User-scope i flera domaner:
- `recipes`: controllers/services skickar vidare `@CurrentUser().userId` och filtrerar pa agarskap.
- `pantry` och `meal-plan`: alla las/skriv-operationer ar user-scopade via `userId` i service-lagret.
- `receipt-alias`: las/skriv/radera styrs av owner/global-regler och aktuell anvandare.
### Delvis implementerat / kvarvarande risk
- Inventory ar inte fullstandigt user-scopat:
- `InventoryItem` saknar `userId` i `backend/prisma/schema.prisma`.
- `inventory.controller.ts` anvander inte `@CurrentUser()` for filtrering/auktorisering.
- Detta ar en kvarvarande IDOR/Full Table Dump-risk tills inventory ar migrerat till user-scope.
### Driftrelaterad hardening som finns
- Secrets injiceras via miljo i `compose.yml` (t.ex. `JWT_SECRET`, `DATABASE_URL`, API-nycklar) och ar inte hardkodade i appkod.
- Prisma migrationer kor vid containerstart och recovery-playbook for P3009 finns dokumenterad i detta dokument.
## Översikt
Recipe App är en fullstack-applikation för hantering av hemmavaror, recept och matplanering. Systemet är byggt med Next.js (frontend), NestJS (backend), Prisma ORM och MariaDB. Applikationen är containeriserad med Docker och använder Caddy som reverse proxy.