Refactoring

This commit is contained in:
dahoud
2026-03-01 22:00:28 +00:00
parent c0e2c4da45
commit 6b28cf751e
469 changed files with 26866 additions and 14768 deletions

348
SECURITY.md Normal file
View File

@@ -0,0 +1,348 @@
# Politique de Sécurité - UnionFlow Client
![Security](https://img.shields.io/badge/Security-A+-green)
![OWASP](https://img.shields.io/badge/OWASP-Top%2010-blue)
Ce document décrit les pratiques de sécurité, les vulnérabilités connues et les procédures de signalement pour l'application UnionFlow Client.
## 📋 Table des Matières
- [Versions Supportées](#versions-supportées)
- [Architecture de Sécurité](#architecture-de-sécurité)
- [Authentification et Autorisation](#authentification-et-autorisation)
- [Protection des Données](#protection-des-données)
- [Headers de Sécurité](#headers-de-sécurité)
- [Gestion des Secrets](#gestion-des-secrets)
- [Vulnérabilités Connues](#vulnérabilités-connues)
- [Signalement de Vulnérabilités](#signalement-de-vulnérabilités)
- [Conformité](#conformité)
## 🔄 Versions Supportées
| Version | Supportée | Fin de Support |
|---------|-----------|----------------|
| 1.0.x | ✅ Oui | 31 Déc 2025 |
| < 1.0 | Non | N/A |
## 🏗️ Architecture de Sécurité
### Modèle de Sécurité
L'application implémente une architecture de sécurité en profondeur (Defense in Depth):
```
┌─────────────────────────────────────────────┐
│ 1. TLS/HTTPS (Transport) │
│ - Certificats SSL/TLS valides │
│ - HSTS activé (max-age=1 an) │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 2. Headers de Sécurité HTTP │
│ - CSP, X-Frame-Options, etc. │
│ - Protection XSS, Clickjacking │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 3. Authentification OIDC (Keycloak) │
│ - OAuth 2.0 / OpenID Connect │
│ - JWT Tokens signés │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 4. Autorisation (RBAC) │
│ - Vérification rôles multiples │
│ - Permissions granulaires │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 5. Validation des Entrées │
│ - Hibernate Validator │
│ - Validateurs personnalisés │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ 6. Logging Sécurisé │
│ - Pas de données sensibles │
│ - Audit trails │
└─────────────────────────────────────────────┘
```
## 🔐 Authentification et Autorisation
### Authentification
- **Méthode**: OpenID Connect (OIDC) via Keycloak
- **Protocole**: OAuth 2.0 Authorization Code Flow
- **Tokens**: JWT (JSON Web Tokens) signés avec RS256
### Configuration Keycloak Requise
```properties
# Serveur d'authentification
quarkus.oidc.auth-server-url=https://security.lions.dev/realms/unionflow
# Client configuration
quarkus.oidc.client-id=unionflow-client
quarkus.oidc.credentials.secret=${KEYCLOAK_CLIENT_SECRET}
# Scopes
quarkus.oidc.authentication.scopes=openid,profile,email,roles
# TLS Verification
quarkus.oidc.tls.verification=required # JAMAIS 'none' en production
```
### Rôles et Permissions
#### Hiérarchie des Rôles
1. **SUPER_ADMIN** - Accès complet système
2. **ADMIN_ENTITE** - Administration organisation
3. **ADMIN** - Administration locale
4. **GESTIONNAIRE_*** - Gestion fonctionnelle
5. **TRESORIER** - Gestion financière
6. **MEMBRE** - Accès membre standard
#### Permissions Granulaires
- `canManageMembers()` - Gestion des membres
- `canManageFinances()` - Gestion financière
- `canManageEvents()` - Gestion des événements
- `canViewReports()` - Consultation des rapports
- `canAccessSuperAdmin()` - Accès super-admin
### Gestion des Sessions
- **Timeout**: 60 minutes par défaut
- **Cookie Flags**:
- `HttpOnly`: Activé (prévention XSS)
- `Secure`: Activé (HTTPS uniquement)
- `SameSite`: `Strict` (prévention CSRF)
### Gestion des Tokens JWT
- **Access Token**: Durée de vie courte (15-30 min)
- **Refresh Token**: Durée de vie longue (7 jours)
- **Stockage**: Cookies HttpOnly (JAMAIS localStorage)
- **Rafraîchissement**: Automatique 5 min avant expiration
- **Cache**: Limite de 10,000 tokens (protection DoS)
## 🛡️ Protection des Données
### Données Sensibles
#### Classification
| Type | Niveau | Stockage | Transmission |
|------|--------|----------|--------------|
| Mots de passe | Critique | Hachés (bcrypt) | HTTPS uniquement |
| Tokens JWT | Critique | Cookies HttpOnly | HTTPS uniquement |
| Email | Confidentiel | Chiffré DB | HTTPS uniquement |
| Téléphone | Confidentiel | Chiffré DB | HTTPS uniquement |
| Nom/Prénom | Public | Clair | HTTPS uniquement |
#### Protection en Transit
- **Protocole**: TLS 1.2+ uniquement (pas de TLS 1.0/1.1)
- **Cipher Suites**: Modernes et sûres uniquement
- **HSTS**: Activé avec `includeSubDomains` et `preload`
#### Protection au Repos
- **Base de données**: Chiffrement au niveau base (via backend)
- **Fichiers**: Chiffrement du système de fichiers recommandé
- **Logs**: Pas de données sensibles loggées
### Conformité RGPD
- **Minimisation des données**: Collecte uniquement des données nécessaires
- **Droit à l'oubli**: API de suppression disponible
- **Portabilité**: Export de données en JSON/Excel
- **Audit**: Logs de toutes les opérations sensibles
## 🔒 Headers de Sécurité
### Configuration Production
Tous les headers suivants sont automatiquement configurés en production:
```properties
# Prévention MIME Sniffing
X-Content-Type-Options: nosniff
# Protection Clickjacking
X-Frame-Options: DENY
# HSTS (HTTPS forcé)
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
# Content Security Policy
Content-Security-Policy: default-src 'self';
script-src 'self' 'unsafe-inline' 'unsafe-eval';
style-src 'self' 'unsafe-inline';
img-src 'self' data:;
font-src 'self' data:;
connect-src 'self';
frame-ancestors 'none'
# Protection XSS (legacy)
X-XSS-Protection: 1; mode=block
# Politique de référents
Referrer-Policy: strict-origin-when-cross-origin
# Permissions Policy
Permissions-Policy: geolocation=(), microphone=(), camera=()
```
### Content Security Policy (CSP)
**Note**: `unsafe-inline` et `unsafe-eval` sont nécessaires pour PrimeFaces/JSF qui génèrent des scripts inline. Une migration vers des nonces CSP est prévue dans une version future.
## 🔑 Gestion des Secrets
### Secrets à Protéger
1. **KEYCLOAK_CLIENT_SECRET** - Secret client Keycloak
2. **Clés de chiffrement** - Si applicable
3. **Tokens API** - Pour services externes
### Bonnes Pratiques
#### ✅ À FAIRE
- Utiliser des **variables d'environnement** pour tous les secrets
- Utiliser un **gestionnaire de secrets** (HashiCorp Vault, AWS Secrets Manager)
- **Régénérer** les secrets régulièrement (rotation)
- Utiliser des **secrets différents** pour dev/staging/prod
- **Auditer** l'accès aux secrets
#### ❌ À NE JAMAIS FAIRE
- Committer des secrets dans Git
- Hardcoder des secrets dans le code
- Partager des secrets par email/Slack
- Utiliser des secrets par défaut
- Logger des secrets
### Vérification dans Git
```bash
# Vérifier qu'aucun secret n'est présent
git secrets --scan
# Nettoyer l'historique si nécessaire
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch src/main/resources/application-dev.properties" \
--prune-empty --tag-name-filter cat -- --all
```
## 🚨 Vulnérabilités Connues
### Critiques Corrigées (v1.0.0)
| ID | Vulnérabilité | Statut | Correction |
|----|---------------|--------|------------|
| SEC-001 | Secret Keycloak en dur | Corrigé | Supprimé du code |
| SEC-002 | TLS verification=none en dev | Corrigé | Activé `required` |
| SEC-003 | Exposition erreurs backend | Corrigé | Messages génériques |
| SEC-004 | Logging données sensibles | Corrigé | Logs anonymisés |
| SEC-005 | Cache tokens illimité | Corrigé | Limite 10,000 |
| SEC-006 | Cookie Secure=false | Corrigé | Activé en prod |
### Risques Résiduels
| Risque | Niveau | Mitigation |
|--------|--------|------------|
| Dépendance PrimeFaces inline scripts | Moyen | CSP avec unsafe-inline |
| Session fixation | Faible | Régénération session à login |
## 📢 Signalement de Vulnérabilités
### Processus de Signalement
Si vous découvrez une vulnérabilité de sécurité:
1. **NE PAS** créer d'issue publique
2. **Envoyer un email** à: security@lions.dev
3. **Inclure**:
- Description détaillée de la vulnérabilité
- Étapes pour reproduire
- Impact potentiel
- Version affectée
- Preuve de concept (si applicable)
### Délais de Réponse
- **Accusé de réception**: 24 heures
- **Évaluation initiale**: 72 heures
- **Correctif critique**: 7 jours
- **Correctif haute priorité**: 30 jours
### Récompenses
Nous proposons un programme de Bug Bounty pour les vulnérabilités critiques validées. Contactez security@lions.dev pour plus de détails.
## 📊 Conformité
### Standards de Sécurité
- **OWASP Top 10 2021**: Conforme
- **OWASP ASVS Level 2**: Conforme
- **CWE Top 25**: Vérifié
### Audits de Sécurité
| Date | Type | Résultat | Rapport |
|------|------|----------|---------|
| 2025-12-17 | Interne | Pass | `docs/audit-2025-12.pdf` |
### Tests de Sécurité
#### Automatisés (CI/CD)
- **Dependency Check**: OWASP Dependency-Check Maven plugin
- **SAST**: Spotbugs Security Plugin
- **Secrets Scanning**: GitGuardian
#### Manuels (Périodiques)
- **Pentesting**: Annuel
- **Code Review**: À chaque release majeure
- **Configuration Review**: Trimestriel
## 🛠️ Outils de Sécurité Recommandés
### Développement
```bash
# Analyse de dépendances
mvn org.owasp:dependency-check-maven:check
# Analyse statique
mvn spotbugs:check
# Secrets scanning
git secrets --scan --recursive
```
### Production
- **WAF**: Cloudflare, AWS WAF, ou ModSecurity
- **IDS/IPS**: Suricata, Snort
- **Log Monitoring**: ELK Stack, Splunk
- **Vulnerability Scanner**: Nessus, OpenVAS
## 📚 Références
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [OWASP ASVS](https://owasp.org/www-project-application-security-verification-standard/)
- [Keycloak Security](https://www.keycloak.org/docs/latest/securing_apps/)
- [Quarkus Security](https://quarkus.io/guides/security)
---
**Dernière mise à jour**: 17 Décembre 2025
**Contact Sécurité**: security@lions.dev
**PGP Key**: Disponible sur demande