feat: enhance security with user-scoped inventory and IDOR protection
Test Suite / test (24.15.0) (push) Has been cancelled
Test Suite / test (24.15.0) (push) Has been cancelled
This commit is contained in:
@@ -17,6 +17,13 @@ Se även:
|
|||||||
|
|
||||||
# Plan för omarbetning av receptimport
|
# 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
|
## Bakgrund
|
||||||
|
|
||||||
Nuvarande importflöde blandar ihop två olika ansvar:
|
Nuvarande importflöde blandar ihop två olika ansvar:
|
||||||
|
|||||||
@@ -372,14 +372,14 @@ gitleaks protect --staged # kör före varje commit
|
|||||||
| **Åtgärd** | **Status** | **Ansvarsområde** |
|
| **Åtgärd** | **Status** | **Ansvarsområde** |
|
||||||
| -------------------------------- | ---------- | ----------------------- |
|
| -------------------------------- | ---------- | ----------------------- |
|
||||||
| IDOR-skydd: recipes, pantry, meal-plan, receipt-alias | ✅ Klart | Backend |
|
| IDOR-skydd: recipes, pantry, meal-plan, receipt-alias | ✅ Klart | Backend |
|
||||||
| IDOR-skydd + userId-filtrering för **inventory** | ⬜ **CRITICAL** | Backend (NestJS/Prisma) |
|
| IDOR-skydd + userId-filtrering för **inventory** | ✅ Klart | Backend (NestJS/Prisma) |
|
||||||
| `dist/` tillagd i `.gitignore` | ⬜ **HIGH** | Git |
|
| `dist/` tillagd i `.gitignore` | ✅ Klart | Git |
|
||||||
| `.env` (utan suffix) i `.gitignore` + `.env.example` | ⬜ MEDIUM | Git |
|
| `.env` (utan suffix) i `.gitignore` + `.env.example` | ✅ Klart | Git |
|
||||||
| Helmet, CORS, ThrottlerGuard, ValidationPipe | ✅ Klart | Backend |
|
| Helmet, CORS, ThrottlerGuard, ValidationPipe | ✅ Klart | Backend |
|
||||||
| Flutter: token-abstraktion (`ITokenStorage`) | ✅ Klart | Flutter |
|
| Flutter: token-abstraktion (`ITokenStorage`) | ✅ Klart | Flutter |
|
||||||
| Flutter: httpOnly cookie-alternativ (om XSS är reell risk) | ⬜ LOW | Flutter + Backend |
|
| Flutter: httpOnly cookie-alternativ (om XSS är reell risk) | ⬜ LOW | Flutter + Backend |
|
||||||
| Gitea webhook-signaturvalidering (om webhooks används) | ⬜ LOW | 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**
|
## 🎯 **8. Prioriterad Ordning för Implementering**
|
||||||
|
|
||||||
1. **Inventory IDOR + userId-fält** (CRITICAL) — påverkar alla användares data
|
1. **Inventory IDOR + userId-fält** (CRITICAL) — ✅ KLART 2026-05-07
|
||||||
2. **dist/ i .gitignore** (HIGH) — förhindrar återkommande deploy-problem
|
2. **dist/ i .gitignore** (HIGH) — ✅ KLART 2026-05-07
|
||||||
3. **bare .env + .env.example** (MEDIUM)
|
3. **bare .env + .env.example** (MEDIUM) — ✅ KLART 2026-05-07
|
||||||
4. **npm audit i CI** (MEDIUM)
|
4. **npm audit i CI** (MEDIUM) — ✅ KLART 2026-05-07
|
||||||
5. **Flutter httpOnly cookies** (LOW — kräver arkitekturförändring)
|
5. **Flutter httpOnly cookies** (LOW — kräver arkitekturförändring)
|
||||||
6. **Gitea webhook-validering** (LOW — bara relevant om webhooks används)
|
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
@@ -97,7 +97,15 @@ Verifiera efter deploy att seed-körning inkluderar uppdaterat kategoriträd och
|
|||||||
|
|
||||||
## Sakerhetsstatus (2026-05-07)
|
## 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
|
### 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-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
|
### Ny databasarkitektur: user-scoped produkter
|
||||||
|
|
||||||
|
|||||||
@@ -71,6 +71,7 @@
|
|||||||
## Fas 6: Säkerhet och driftbarhet (parallellt)
|
## Fas 6: Säkerhet och driftbarhet (parallellt)
|
||||||
1. Säkerhetsgranskning:
|
1. Säkerhetsgranskning:
|
||||||
- Input-validering, auth/role-kontroller, secret-hantering.
|
- 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:
|
2. Driftbarhet:
|
||||||
- Strukturerad loggning, korrelations-id, tydligare metrics.
|
- Strukturerad loggning, korrelations-id, tydligare metrics.
|
||||||
3. Resiliens:
|
3. Resiliens:
|
||||||
|
|||||||
Reference in New Issue
Block a user