# Exploitation, sécurité et sauvegardes

## Sécurité active

- racine Web limitée à `php/public` ;
- secrets dans `config/config.php`, ignoré par Git et hors Web ;
- images hors Web, servies seulement par `/api/images/{key}` ;
- validation MIME + contenu image, JPEG/PNG/WebP, maximum 5 Mo ;
- nom d'image généré par serveur ;
- chemins d'images validés et non traversables ;
- aucun script exécutable dans le stockage ;
- en-têtes anti-sniffing, anti-frame, CSP et `Referrer-Policy: no-referrer` ;
- cache long seulement pour les images immuables ; HTML et API non mis en cache ;
- 20 écritures maximum par IP, méthode et route sur une heure ;
- liens privés protégés contre le référent vers les sites externes.

La limite locale ne remplace pas une protection anti-bot ou pare-feu : une
protection additionnelle pourra être ajoutée plus tard si le trafic l'exige.

## Journalisation

Les événements techniques sont écrits en JSONL quotidien dans
`storage/logs/eventgo-AAAA-MM-JJ.log`. Ils ne contiennent ni mot de passe,
adresse e-mail ni jeton privé. Conserver 30 jours maximum, puis supprimer ou
archiver selon votre politique interne.

À surveiller : `event_creation_unavailable`, `*_unavailable`, `rate_limit` et
`image_upload_rejected`.

## Sauvegardes

Le script CLI suivant crée un dossier daté hors Web avec :

- `database.sql` (table Event'Go complète) ;
- `images/` ;
- `manifest.json` (compteurs et date UTC).

```bash
php eventgo/scripts/backup.php
```

Programmer quotidiennement cette commande dans une tâche OVH si l'offre le
permet. Conserver au moins 14 sauvegardes, dont une copie téléchargée hors
hébergement. Le script ne supprime volontairement aucune sauvegarde.

Pour restaurer : mettre le site en maintenance manuelle, importer
`database.sql` dans une base vide/de remplacement, recopier les images, mettre
à jour `config/config.php`, puis effectuer la recette complète. Ne jamais
restaurer directement sur le domaine public sans validation préalable.

## E-mail OVH

Le transport est `mail()` PHP, sans service payant supplémentaire. Avant
d'activer l'envoi : utiliser une adresse expéditrice du domaine, vérifier SPF,
DKIM/DMARC et les limites OVH, puis envoyer un seul message vers une boîte de
contrôle. Un échec d'e-mail ne bloque jamais la publication : le lien privé est
toujours affiché immédiatement dans l'interface.
