# Guide de Sécurité - MMPV Laravel Application

## 🛡️ Mesures de Sécurité Implémentées

Ce document décrit toutes les mesures de sécurité mises en place dans l'application MMPV Laravel pour protéger contre les différents types d'attaques.

---

## 1. Protection contre les Attaques XSS (Cross-Site Scripting)

### Mesures appliquées :
- ✅ **Échappement automatique** : Laravel Blade échappe automatiquement toutes les sorties avec `{{ $variable }}`
- ✅ **Validation stricte** : Regex appliqués sur les champs de formulaire
- ✅ **Nettoyage des entrées** : Utilisation de `strip_tags()` sur les données utilisateur
- ✅ **CSP (Content Security Policy)** : Headers configurés pour bloquer les scripts non autorisés

### Fichiers concernés :
- `app/Http/Middleware/SecurityHeaders.php` - Header X-XSS-Protection
- `app/Support/CustomCspPolicy.php` - Politique CSP personnalisée
- `app/Http/Controllers/PublicController.php` - Validation et nettoyage des entrées

---

## 2. Protection CSRF (Cross-Site Request Forgery)

### Mesures appliquées :
- ✅ **Token CSRF** : Tous les formulaires incluent `@csrf`
- ✅ **Vérification automatique** : Laravel vérifie automatiquement les tokens CSRF
- ✅ **SameSite Cookie** : Configuration `lax` pour les cookies de session

### Fichiers concernés :
- Tous les fichiers `.blade.php` avec formulaires
- `config/session.php` - Configuration des cookies
- `.env` - `SESSION_SAME_SITE=lax`

---

## 3. Protection contre l'Injection SQL

### Mesures appliquées :
- ✅ **Eloquent ORM** : Utilisation exclusive de l'ORM Laravel (pas de requêtes SQL brutes)
- ✅ **Requêtes préparées** : Toutes les requêtes utilisent des bindings automatiques
- ✅ **Validation des IDs** : Validation `exists:table,column` pour les clés étrangères

### Fichiers concernés :
- Tous les contrôleurs (`app/Http/Controllers/`)
- Modèles (`app/Models/`)

---

## 4. Protection contre le Clickjacking

### Mesures appliquées :
- ✅ **X-Frame-Options** : Header configuré à `SAMEORIGIN`
- ✅ **CSP frame-ancestors** : Directive CSP pour contrôler l'intégration en iframe

### Fichiers concernés :
- `app/Http/Middleware/SecurityHeaders.php`

---

## 5. Protection contre les Attaques par Force Brute

### Mesures appliquées :
- ✅ **Rate Limiting** :
  - Témoignages : 5 tentatives par minute
  - Inscription membre : 3 tentatives par minute
  - API : Throttling automatique
- ✅ **Middleware throttle** : Appliqué sur les routes sensibles

### Fichiers concernés :
- `routes/web.php` - Middleware `throttle:X,Y`
- `bootstrap/app.php` - Configuration globale du throttling

---

## 6. En-têtes de Sécurité HTTP

### Headers implémentés :
```
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), microphone=(), camera=()
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload (en production)
```

### Fichiers concernés :
- `app/Http/Middleware/SecurityHeaders.php`
- `bootstrap/app.php`

---

## 7. Content Security Policy (CSP)

### Directives configurées :
- **script-src** : Scripts autorisés (self, CDN Tailwind, YouTube, etc.)
- **style-src** : Styles autorisés (self, inline, CDN)
- **img-src** : Images autorisées (self, data:, https:)
- **frame-src** : iframes autorisés (YouTube)
- **object-src** : Objects bloqués ('none')
- **base-uri** : Limité à 'self'
- **form-action** : Soumission limitée à 'self'

### Fichiers concernés :
- `app/Support/CustomCspPolicy.php`
- `config/csp.php`

---

## 8. Validation des Données Utilisateur

### Règles de validation strictes :

#### Témoignages :
```php
'author_name' => 'required|string|max:255|regex:/^[a-zA-ZÀ-ÿ\s\-\']+$/',
'content' => 'required|string|min:10|max:5000',
```

#### Inscription Membre :
```php
'first_name' => 'required|string|max:255|regex:/^[a-zA-ZÀ-ÿ\s\-\']+$/',
'email' => 'required|email|max:255|unique:members,email',
'phone' => 'required|string|max:20|regex:/^[\+]?[0-9\s\-\(\)]+$/',
'date_of_birth' => 'required|date|before:today|after:1900-01-01',
```

### Fichiers concernés :
- `app/Http/Controllers/PublicController.php`

---

## 9. Configuration des Sessions Sécurisées

### Paramètres :
```
SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_HTTP_ONLY=true
SESSION_SAME_SITE=lax
SESSION_SECURE_COOKIE=false (true en production HTTPS)
```

### Fichiers concernés :
- `config/session.php`
- `.env`

---

## 10. Protection contre le MIME Sniffing

### Mesures appliquées :
- ✅ **X-Content-Type-Options** : Header configuré à `nosniff`
- ✅ Empêche les navigateurs de deviner le type MIME

---

## 🚀 Déploiement en Production

### Checklist de sécurité :

1. **Variables d'environnement** :
   ```
   APP_ENV=production
   APP_DEBUG=false
   SESSION_SECURE_COOKIE=true
   ```

2. **HTTPS obligatoire** :
   - Activer HSTS (déjà configuré dans SecurityHeaders.php)
   - Configurer le certificat SSL/TLS

3. **Base de données** :
   - Utiliser un mot de passe fort
   - Restreindre les accès réseau
   - Activer les logs de sécurité

4. **Permissions fichiers** :
   ```bash
   chmod 644 .env
   chmod -R 755 storage
   chmod -R 755 bootstrap/cache
   ```

5. **Mises à jour** :
   ```bash
   composer update --no-dev
   php artisan optimize
   php artisan config:cache
   php artisan route:cache
   php artisan view:cache
   ```

---

## 📦 Packages de Sécurité Installés

1. **spatie/laravel-csp** (v2.10.3)
   - Gestion de Content Security Policy
   - Protection contre XSS

2. **spatie/laravel-permission** (v6.24.0)
   - Gestion des rôles et permissions
   - Contrôle d'accès granulaire

---

## 🔍 Tests de Sécurité Recommandés

### Outils :
- **OWASP ZAP** : Scanner de vulnérabilités
- **Burp Suite** : Test d'intrusion
- **Security Headers** : https://securityheaders.com/
- **Mozilla Observatory** : https://observatory.mozilla.org/

### Tests à effectuer :
1. Test d'injection SQL
2. Test XSS (stored, reflected)
3. Test CSRF
4. Test clickjacking
5. Test rate limiting
6. Scan des headers de sécurité
7. Test des permissions

---

## 📚 Ressources

- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [Laravel Security Best Practices](https://laravel.com/docs/12.x/security)
- [Content Security Policy Reference](https://content-security-policy.com/)

---

## ⚠️ Signalement de Vulnérabilités

Si vous découvrez une vulnérabilité de sécurité, veuillez la signaler de manière responsable à l'équipe de développement.

---

**Date de dernière mise à jour** : 28 Décembre 2025
**Version** : 1.0
