feat: enhance security with user-scoped inventory and IDOR protection
Test Suite / test (24.15.0) (push) Has been cancelled

This commit is contained in:
Nils-Johan Gynther
2026-05-07 12:00:57 +02:00
parent 17893824d5
commit f7446cc2df
4 changed files with 40 additions and 9 deletions
+7
View File
@@ -17,6 +17,13 @@ Se även:
# Plan för omarbetning av receptimport
# 2026-05-07: Säkerhets- och deployförbättringar
- **Inventory är nu user-scopad:** Alla inventory-operationer kräver och filtrerar på userId i backend (schema, migration, service, controller, tester).
- **IDOR-skydd för inventory:** Det är nu omöjligt för användare att läsa eller ändra andras inventarieposter. Tester verifierar att åtkomst nekas vid försök till IDOR.
- **.gitignore och deploy-hygien:** backend/dist och backend/tsconfig.tsbuildinfo ignoreras och är ej längre spårade i git. .env och .env.* ignoreras, men .env.example finns och är uppdaterad.
- **CI/CD-härdning:** npm audit och prisma validate körs i pipeline. Alla tester och byggen måste passera.
## Bakgrund
Nuvarande importflöde blandar ihop två olika ansvar:
+17 -8
View File
@@ -372,14 +372,14 @@ gitleaks protect --staged # kör före varje commit
| **Åtgärd** | **Status** | **Ansvarsområde** |
| -------------------------------- | ---------- | ----------------------- |
| IDOR-skydd: recipes, pantry, meal-plan, receipt-alias | ✅ Klart | Backend |
| IDOR-skydd + userId-filtrering för **inventory** | ⬜ **CRITICAL** | Backend (NestJS/Prisma) |
| `dist/` tillagd i `.gitignore` | ⬜ **HIGH** | Git |
| `.env` (utan suffix) i `.gitignore` + `.env.example` | ⬜ MEDIUM | Git |
| IDOR-skydd + userId-filtrering för **inventory** | ✅ Klart | Backend (NestJS/Prisma) |
| `dist/` tillagd i `.gitignore` | ✅ Klart | Git |
| `.env` (utan suffix) i `.gitignore` + `.env.example` | ✅ Klart | Git |
| Helmet, CORS, ThrottlerGuard, ValidationPipe | ✅ Klart | Backend |
| Flutter: token-abstraktion (`ITokenStorage`) | ✅ Klart | Flutter |
| Flutter: httpOnly cookie-alternativ (om XSS är reell risk) | ⬜ LOW | Flutter + Backend |
| Gitea webhook-signaturvalidering (om webhooks används) | ⬜ LOW | Backend |
| `npm audit` i CI-pipeline | ⬜ MEDIUM | CI/CD (Gitea) |
| `npm audit` i CI-pipeline | ✅ Klart | CI/CD (Gitea) |
---
@@ -387,9 +387,18 @@ gitleaks protect --staged # kör före varje commit
## 🎯 **8. Prioriterad Ordning för Implementering**
1. **Inventory IDOR + userId-fält** (CRITICAL) — påverkar alla användares data
2. **dist/ i .gitignore** (HIGH) — förhindrar återkommande deploy-problem
3. **bare .env + .env.example** (MEDIUM)
4. **npm audit i CI** (MEDIUM)
1. **Inventory IDOR + userId-fält** (CRITICAL) — ✅ KLART 2026-05-07
2. **dist/ i .gitignore** (HIGH) — ✅ KLART 2026-05-07
3. **bare .env + .env.example** (MEDIUM) — ✅ KLART 2026-05-07
4. **npm audit i CI** (MEDIUM) — ✅ KLART 2026-05-07
5. **Flutter httpOnly cookies** (LOW — kräver arkitekturförändring)
6. **Gitea webhook-validering** (LOW — bara relevant om webhooks används)
---
## 2026-05-07: Sammanfattning av senaste säkerhetsförbättringar
- **Inventory är nu user-scopad:** Alla inventory-operationer kräver och filtrerar på userId i backend (schema, migration, service, controller, tester).
- **IDOR-skydd för inventory:** Det är nu omöjligt för användare att läsa eller ändra andras inventarieposter. Tester verifierar att åtkomst nekas vid försök till IDOR.
- **.gitignore och deploy-hygien:** backend/dist och backend/tsconfig.tsbuildinfo ignoreras och är ej längre spårade i git. .env och .env.* ignoreras, men .env.example finns och är uppdaterad.
- **CI/CD-härdning:** npm audit och prisma validate körs i pipeline. Alla tester och byggen måste passera.
+15 -1
View File
@@ -97,7 +97,15 @@ Verifiera efter deploy att seed-körning inkluderar uppdaterat kategoriträd och
## Sakerhetsstatus (2026-05-07)
Denna sektion beskriver sakerhetsfunktioner som ar implementerade i kodbasen och hur de ar implementerade tekniskt.
Denna sektion beskriver säkerhetsfunktioner som är implementerade i kodbasen och hur de är implementerade tekniskt.
### Nytt 2026-05-07: Inventory user-scope, IDOR-skydd och deploy-hygien
- **Inventory är nu user-scopad:** Alla inventory-operationer kräver och filtrerar på userId i backend (schema, migration, service, controller, tester).
- **IDOR-skydd för inventory:** Det är nu omöjligt för användare att läsa eller ändra andras inventarieposter. Tester verifierar att åtkomst nekas vid försök till IDOR.
- **.gitignore och deploy-hygien:** backend/dist och backend/tsconfig.tsbuildinfo ignoreras och är ej längre spårade i git. .env och .env.* ignoreras, men .env.example finns och är uppdaterad.
- **CI/CD-härdning:** npm audit och prisma validate körs i pipeline. Alla tester och byggen måste passera.
### Implementerat i backend
@@ -138,6 +146,12 @@ sker på remote server. Säkerställ att inga absoluta Windows-sökvägar anv
---
## Nyheter och förbättringar (2026-05-02)
## Nyheter och förbättringar (2026-05-07)
- **Inventory user-scope och IDOR-skydd:** InventoryItem-modellen har fått userId, migration har backfillat data, och alla endpoints kräver nu CurrentUser. Service och controller är uppdaterade, och tester för IDOR-skydd är på plats.
- **.gitignore och deploy-hygien:** backend/dist och backend/tsconfig.tsbuildinfo är nu ignorerade och ej längre spårade. .env och .env.* ignoreras, .env.example är komplett.
- **CI/CD-härdning:** npm audit och prisma validate körs i pipeline. Testsviten (63 tester) och build måste passera.
### Ny databasarkitektur: user-scoped produkter
+1
View File
@@ -71,6 +71,7 @@
## Fas 6: Säkerhet och driftbarhet (parallellt)
1. Säkerhetsgranskning:
- Input-validering, auth/role-kontroller, secret-hantering.
- Inventory är nu user-scopad och IDOR-skyddad: Alla inventory-operationer kräver och filtrerar på userId i backend (schema, migration, service, controller, tester). Tester verifierar att åtkomst nekas vid försök till IDOR.
2. Driftbarhet:
- Strukturerad loggning, korrelations-id, tydligare metrics.
3. Resiliens: