# Exploitation — installation, déploiement, sauvegarde, incident

## 1. Installation (développement)
Prérequis : PHP 8.3, Composer, MySQL/MariaDB.

```bash
composer install
cp .env.example .env
php artisan key:generate
# configurer DB_* dans .env (base 'vraidocs')
php artisan migrate --seed
php artisan storage:link
php artisan serve
```
Comptes de démonstration (mot de passe `MotDePasse#2026`) :
`boss@vraidocs.ne` (super-admin), `admin@institut-demo.ne` (admin émetteur), `operateur@institut-demo.ne`.

## 2. Déploiement (production)
Stack cible : Linux, Nginx + PHP-FPM, HTTPS (TLS 1.2+), MySQL/MariaDB.

```bash
# variables d'environnement de production
APP_ENV=production
APP_DEBUG=false            # SEC-20 : aucune divulgation technique
APP_URL=https://verify.vraidocs.ne   # domaine du QR
SESSION_SECURE_COOKIE=true # SEC-05
QUEUE_CONNECTION=database
PASSWORD_CHECK_COMPROMISED=true

php artisan config:cache route:cache view:cache
php artisan migrate --force
# worker de file d'attente (imports EF-07)
php artisan queue:work --daemon   # via supervisor/systemd
# planificateur (purge SEC-16)
* * * * * php /var/www/vraidocs/artisan schedule:run   # cron
```
- Servir **uniquement** `public/` ; `storage/app/private` reste hors racine web (SEC-12).
- Forcer HTTPS ; l'en-tête HSTS est émis automatiquement en HTTPS (SEC-19).

## 3. Environnements séparés (SEC-30)
Trois environnements : développement, pré-production, production, isolés par `.env`.
**Aucune donnée réelle** en dev/test (bases distinctes ; jeux de démonstration uniquement).

## 4. Sauvegarde chiffrée et restauration (SEC-25)
À sauvegarder : base de données + `storage/app/private` (clés privées chiffrées, justificatifs, photos).

```bash
# Sauvegarde chiffrée (exemple)
mysqldump vraidocs | gzip | gpg --encrypt --recipient backup@vraidocs.ne > backup-$(date +%F).sql.gz.gpg
tar czf - storage/app/private | gpg --encrypt --recipient backup@vraidocs.ne > private-$(date +%F).tar.gz.gpg
```
- Sauvegardes **quotidiennes**, chiffrées, stockées hors-site.
- **RPO** cible : 24 h. **RTO** cible : 4 h.
- ⚠️ **Test de restauration obligatoire avant go-live** : restaurer en pré-production et
  vérifier l'intégrité (émission + vérification d'un document témoin). Consigner le résultat.

## 5. Réponse à incident (SEC-26)
1. **Détection** : alertes du canal `security` (échecs d'auth, verrouillages) + supervision.
2. **Confinement** : suspendre les comptes/émetteurs compromis ; si clé compromise, révoquer et
   effectuer une rotation via un nouveau `key_id`.
3. **Éradication / restauration** : corriger la cause, restaurer depuis une sauvegarde saine.
4. **Notification** : en cas de violation de données, notifier l'autorité compétente sous **72 h**.
5. **Post-mortem** : consigner et corriger.

## 6. Test d'intrusion (SEC-28) — périmètre
À réaliser par un tiers indépendant avant go-live (puis périodiquement) :
- Authentification & sessions (SEC-01→05), 2FA.
- Cloisonnement multi-émetteur / IDOR (SEC-07).
- Références & URLs (énumération, falsification QR — SEC-08/09/10).
- Upload de fichiers piégés (SEC-18), accès aux fichiers privés (SEC-12).
- Injection / XSS / CSRF (SEC-17), en-têtes (SEC-19), divulgation d'erreurs (SEC-20).
- Rate-limiting / anti-abus (SEC-22).
Règle : **zéro faille critique ou majeure ouverte au go-live**.
