# Sécurité & Tests — Rapport de Conformité MayiMavaStore

> Ce document atteste de la conformité de la plateforme MayiMavaStore aux exigences de sécurité et de tests définies dans le cahier de charges.

---

## 1. Sécurité

### 1.1 Protection des Données ✅

| Mesure | Statut | Détails |
|---|:---:|---|
| Mots de passe hachés (bcrypt) | ✅ | 12 rounds en production, algorithme bcrypt |
| Access tokens JWT en mémoire | ✅ | Token stocké en mémoire + localStorage chiffré AES |
| Sessions chiffrées | ✅ | `session.encrypt = true` dans la configuration |
| Cookies httpOnly | ✅ | `session.http_only = true` |
| Cookies SameSite | ✅ | `session.same_site = lax` |
| Données sensibles non exposées | ✅ | APP_DEBUG=false en production, pas d'erreurs SQL exposées |
| CORS strict | ✅ | Origines explicites, pas de wildcard |

### 1.2 Authentification ✅

| Mesure | Statut | Détails |
|---|:---:|---|
| JWT (JSON Web Token) | ✅ | `tymon/jwt-auth` v2.0 — HS256, TTL 60min, refresh 14j |
| Token Blacklisting | ✅ | Invalidation après logout via blacklist |
| Token Refresh automatique | ✅ | Intercepteur Axios avec mutex et retry |
| OAuth (Google) | ✅ | `laravel/socialite` — Google Social Login |
| 2FA (Email OTP) | ✅ | Auto-activé pour les vendeurs, OTP 10min |
| Verrouillage de compte | ✅ | 5 tentatives max, lockout 15 minutes |
| Rate limiting auth | ✅ | Login 5/min, Register 3/min, Reset 3/10min |
| Roles & Permissions | ✅ | `spatie/laravel-permission` — buyer, seller, admin, superadmin |

### 1.3 Prévention des Attaques ✅

| Attaque | Protection | Détails |
|---|:---:|---|
| **XSS (Cross-Site Scripting)** | ✅ | `SanitizeInputMiddleware` global (strip_tags), DOMPurify côté frontend, `ChatContentSanitizer` pour le chat |
| **CSRF (Cross-Site Request Forgery)** | ✅ | Protection CSRF Laravel native, JWT Bearer auth (immune CSRF par design) |
| **SQL Injection** | ✅ | Eloquent ORM avec requêtes préparées, DB::raw uniquement pour agrégations statiques |
| **Clickjacking** | ✅ | `X-Frame-Options: DENY` via SecurityHeadersMiddleware |
| **MIME Sniffing** | ✅ | `X-Content-Type-Options: nosniff` |
| **Man-in-the-Middle** | ✅ | HSTS en production (`Strict-Transport-Security`) |
| **Content Injection** | ✅ | CSP (Content-Security-Policy) configuré |
| **Spam / Flood (Chat)** | ✅ | `AntiSpamMiddleware` (flood 10/30s, doublons 3/60s) + `ChatRateLimitMiddleware` (30/min) |
| **Brute Force** | ✅ | Rate limiting + account lockout |

---

## 2. Tests et Validation

### 2.1 Tests Unitaires ✅

| Test | Fichier | Couverture |
|---|---|---|
| ChatContentSanitizer | `tests/Unit/Services/ChatContentSanitizerTest.php` | XSS, HTML injection, masquage email/téléphone, URLs, longueur, whitespace |
| SecurityHeadersMiddleware | `tests/Unit/Middleware/SecurityHeadersMiddlewareTest.php` | Tous les headers OWASP, CSP, HSTS |
| SanitizeInputMiddleware | `tests/Unit/Middleware/SanitizeInputMiddlewareTest.php` | Strip tags, champs exclus, nested arrays, types non-string |
| AdminOnlyMiddleware | `tests/Unit/Middleware/AdminOnlyMiddlewareTest.php` | Admin/superadmin autorisés, buyer/seller bloqués |
| StockManagement | `tests/Feature/StockManagementFlowTest.php` | Réservation, commit, release, retour, overselling |
| DeliveryQrCode | `tests/Feature/DeliveryQrCodeTest.php` | Génération et vérification QR |
| FlashSaleVip | `tests/Feature/FlashSaleVipTest.php` | Accès VIP, réservation |

### 2.2 Tests d'Intégration ✅

| Test | Fichier | Couverture |
|---|---|---|
| Login | `tests/Feature/Auth/LoginTest.php` | Login valide/invalide, rate limiting, champs manquants |
| Register | `tests/Feature/Auth/RegisterTest.php` | Inscription, doublons, mots de passe faibles, rate limiting |
| JWT Token | `tests/Feature/Auth/JwtTokenTest.php` | Token valide/invalide, logout blacklist, refresh |
| XSS Prevention | `tests/Feature/Security/XssPreventionTest.php` | Payloads XSS sur produits, profils, catégories + headers |
| SQL Injection | `tests/Feature/Security/SqlInjectionTest.php` | Payloads SQL sur search, URLs, login |
| Authorization | `tests/Feature/Security/AuthorizationTest.php` | Buyer→Admin, Seller→Seller cross, accès non-auth |
| Rate Limiting | `tests/Feature/Security/RateLimitTest.php` | Login, register, password reset rate limits |

### 2.3 Tests de Performance 🔄

> Les tests de performance (charge) nécessitent un outil dédié (k6, Artillery, JMeter) et un environnement de staging. La configuration suivante est recommandée :

```yaml
# artillery-config.yml (exemple)
config:
  target: "https://api.mayimavastore.com"
  phases:
    - duration: 60
      arrivalRate: 50
      name: "Warm up"
    - duration: 120
      arrivalRate: 200
      name: "Sustained load"
scenarios:
  - name: "Browse products"
    flow:
      - get:
          url: "/api/v1/products"
      - get:
          url: "/api/v1/categories"
```

La plateforme est optimisée pour la performance via :
- **Compression gzip** (`CompressResponseMiddleware`)
- **Cache headers** (`CacheHeadersMiddleware` — 7 jours pour assets statiques)
- **Rate limiting** (protection contre les abus)
- **Pagination** sur tous les endpoints de listing

### 2.4 Audit de Sécurité ✅

| Test | Fichier | Vérifications |
|---|---|---|
| Security Audit | `tests/Security/SecurityAuditTest.php` | Headers, JWT config, session config, CORS, auth protection, 2FA, password hashing |
| Dependency Audit (BE) | `composer audit` | Vérification des vulnérabilités dans les packages PHP (Backend) |
| Dependency Audit (FE) | `npm audit` | Vérification des vulnérabilités dans les packages Node.js (Frontends) |

---

## 3. Commandes pour exécuter les tests

```bash
# Tous les tests
php artisan test

# Tests unitaires uniquement
php artisan test --testsuite=Unit

# Tests d'intégration uniquement
php artisan test --testsuite=Feature

# Audit de sécurité uniquement
php artisan test --testsuite=Security

# Tests d'authentification
php artisan test --filter=Auth

# Tests de sécurité (XSS, SQL Injection, Authorization)
php artisan test --filter=Security

# Avec couverture (si xdebug est installé)
php artisan test --coverage

# Audit des vulnérabilités (Dépendances Backend)
composer audit

# Audit des vulnérabilités (Dépendances Frontend - à lancer dans les dossiers FE)
npm audit
```

---

## 4. Architecture de sécurité

```
Requête HTTP
    │
    ├── HandleCors (CORS validation)
    ├── SecurityHeadersMiddleware (OWASP headers)
    ├── SanitizeInputMiddleware (strip HTML tags)
    ├── ThrottleRequests (rate limiting)
    │
    ├── [Si authentifié]
    │   ├── auth:api (JWT validation)
    │   ├── role/permission (Spatie)
    │   └── admin.only (AdminOnlyMiddleware)
    │
    ├── [Si chat]
    │   ├── chat.rate.limit (30/min)
    │   ├── anti.spam (flood + doublons)
    │   └── ChatContentSanitizer (XSS + masquage)
    │
    └── Controller → Eloquent (parameterized queries)
```

---

## 5. Middlewares de sécurité

| Middleware | Type | Description |
|---|---|---|
| `SecurityHeadersMiddleware` | Global API | Headers OWASP sur toutes les réponses |
| `SanitizeInputMiddleware` | Global API | Sanitization des inputs POST/PUT/PATCH |
| `AdminOnlyMiddleware` | Route | Restreint aux admin/superadmin |
| `AntiSpamMiddleware` | Route (Chat) | Anti-flood et anti-doublons |
| `ChatRateLimitMiddleware` | Route (Chat) | 30 messages/minute max |
| `CacheHeadersMiddleware` | Route (Assets) | Cache 7 jours pour assets |
| `CompressResponseMiddleware` | Route | Compression gzip des réponses |

---

*Document généré le 17 avril 2026 — Conformité au cahier de charges MayiMavaStore v1.0*
