Aller au contenu

Sécurité

⬇️ Télécharger cette page en Markdown


Introduction

Documentation complète de la sécurité : multi-tenant, RGPD, conformité ANSSI, Active Directory.


Contenu

Multi-tenant

Audit sécurité complet : isolation par mairie, endpoints API, vulnérabilités corrigées, tests recommandés.

Floutage visages

Face blurring RGPD : détection (PHP facedetect / Haar Cascade), algorithme (pixellisation + Gaussian blur), installation, monitoring.

Conformité ANSSI

Checklist ANSSI : TLS 1.3, permissions fichiers, sessions sécurisées, prepared statements, password hashing.

Active Directory

Intégration SSO LDAP : authentification AD, synchronisation utilisateurs, permissions hybrides.


Principes de Sécurité

Secure by Default

Tous les composants suivent les recommandations ANSSI par défaut.

1. Multi-Tenant Isolation

Principe : Aucune donnée ne fuit entre mairies.

Mécanismes : - Filtrage SQL strict par mairie_id - Validation API par code_postal - Permissions service-based - Cache avec préfixe mairie_id

2. RGPD Compliance

Face Blurring : - Détection automatique visages - Anonymisation obligatoire - Pas de conservation originaux - Traçabilité BDD

Données Personnelles : - Citoyens anonymes par défaut - Soft delete (préservation stats) - Exports chiffrés

3. ANSSI Recommendations

Règle Implémentation
TLS 1.3+ Reverse proxy
En-têtes HTTP CSP, HSTS (2 ans), X-Frame, X-Content-Type, Referrer, Permissions-Policy
CORS Whitelist stricte via SecurityHelpers::setCorsHeaders() — plus de wildcard
Permissions 0755 dirs, 0644 files (0777 banni)
Sessions HttpOnly, SameSite Strict, use_strict_mode
SQL Prepared statements + mapping statique pour les noms de colonnes
Passwords bcrypt (cost 12)
PHP config display_errors=Off, expose_php=Off, allow_url_fopen=Off
JWT Secret obligatoire dans .env — aucun fallback faible
Erreurs Messages génériques côté client, détails loggés serveur
Uploads Validation MIME par magic bytes + exécution PHP bloquée dans /uploads/
Path traversal Validation realpath() sur toute récupération de fichier

Audit Sécurité v2.0

Vulnérabilité Corrigée

Endpoint : get_all_unresolved_incidents.php

Avant :

// ❌ Retournait incidents de TOUTES les mairies sans auth
$incidents = $db->fetchAll("SELECT * FROM incidents WHERE statut != 'resolu'");

Après :

// ✅ Auth obligatoire + filtrage strict
Auth::requireAuth();
$mairie = MairieService::getByCodePostal($_GET['code_postal']);
$incidents = $db->fetchAll(
    "SELECT * FROM incidents WHERE statut != 'resolu' AND mairie_id = ?",
    [$mairie['id']]
);


Tests Sécurité Recommandés

Tests Multi-Tenant

# Test 1: Tentative accès mairie différente
curl -H "X-Fingerprint: test" \
  "http://localhost:8080/api/get_incidents.php?code_postal=06000"

curl -H "X-Fingerprint: test" \
  "http://localhost:8080/api/get_incidents.php?code_postal=75001"

# Vérifier : aucun incident de 06000 dans réponse 75001

Tests Injection SQL

# Test injection dans code_postal
curl "http://localhost:8080/api/get_types.php?code_postal=06000' OR '1'='1"

# Attendu : 400 Bad Request ou []

Checklist Production

  • Changer TOUS les mots de passe (DB, Redis, SMTP)
  • Générer JWT_SECRET fort : openssl rand -hex 32
  • Définir APP_ENV=production (exclut localhost de la whitelist CORS)
  • APP_DEBUG=false
  • TLS 1.3 activé (reverse proxy)
  • Ports DB/Redis non exposés
  • phpMyAdmin désactivé (pas de --profile admin)
  • Face blurring activé
  • Backups chiffrés
  • Logs centralisés
  • Rate limiting activé
  • WAF configuré (optionnel)
  • Rebuild Docker après changement de config : docker-compose up -d --build

Document Description
Multi-tenant Audit isolation mairies
Face Blurring RGPD anonymisation
ANSSI Conformité ANSSI
Active Directory SSO LDAP