# Sécurité et exploitation

- Le document root doit être `public` et aucun autre dossier ne doit être exposé.
- HTTPS est obligatoire en production.
- Les clés de signature doivent être différentes entre recette et production.
- Les comptes SQL Workspace, Licence et Tracking restent distincts.
- Les logs ne doivent jamais contenir mot de passe, token, téléphone clair ou binaire.
- Les access tokens sont signés et expirent après 15 minutes.
- Les refresh tokens sont opaques, stockés sous forme de hash et rotatifs.
- Les invitations expirent après 48 heures ; les resets après 30 minutes.
- Les uploads sont validés par MIME réel, dimensions, extension, taille et hash.
- Les fichiers privés sont servis uniquement après contrôle d'organisation et de permission.
- Les tâches de purge, d'intégrité et de sauvegarde doivent être surveillées.
- La réserve disque absolue `min_free_bytes` est toujours appliquée. La réserve proportionnelle `min_free_ratio` n’est calculée que sur une capacité explicitement déclarée avec `capacity_reference_bytes`, ou sur le volume du système de fichiers lorsque `use_filesystem_total_for_ratio=true` est volontairement activé. Sur un hébergement mutualisé, le volume global de l’hôte ne doit pas servir de référence implicite.
- Les réponses 409 ne doivent jamais être contournées par une fusion silencieuse côté client.
- Les migrations sont additives ; aucun rollback ne supprime automatiquement une table ou une colonne.

## Packaging et configuration — maintenance 1.0.6-lot1

- `config/config.php` est propre à l'environnement et ne doit jamais être livré dans un ZIP de code.
- Le modèle sans secret est `config/config.example.php`.
- Les répertoires `storage/backups`, `storage/logs`, `storage/private` et `storage/quarantine` ne doivent contenir dans les packages que leurs fichiers `.gitkeep`.
- `scripts/verify_installation.php` contrôle que `min_free_ratio` reste compris entre 0,20 et 1, que `min_free_bytes` est positif et que les paramètres facultatifs de référence de capacité sont cohérents.
- `scripts/scan_orphan_files.php` compare le stockage privé aux références `shared_files` et peut déplacer les fichiers orphelins en quarantaine sans suppression définitive.
