CHANGEMENTS MAJEURS: - Fusion des 3 bases de données (uof_frontal, uof_linet, logs) en une seule base 'cleo' - Migration vers PDO avec pattern Singleton et requêtes préparées - Configuration externalisée via variables d'environnement (.env) - Séparation application (dva-front) et base de données (maria3) SÉCURITÉ: - Suppression des credentials en dur dans le code - Implémentation de la classe Database avec gestion d'erreurs sécurisée - Protection contre les injections SQL via requêtes préparées INFRASTRUCTURE: - Container dva-front : MariaDB supprimé, application PHP uniquement - Container maria3 : Base de données centralisée MariaDB 11.4 - Script de déploiement optimisé (deploy-cleo-fast.sh) CORRECTIONS: - Ajout des tables manquantes (z_sessions, z_stats, marches_listes) - Compatibilité PDO (fetch_assoc → fetch(PDO::FETCH_ASSOC)) - Suppression des commentaires debug dans les réponses AJAX - Permissions fichiers (.env 644, logs 777 avec owner nobody) DOCUMENTATION: - Mise à jour README.md avec architecture actuelle - Migration README.md marqué comme complété - TODO.md avec état d'avancement et prochaines étapes (PROD IN4) 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
219 lines
7.7 KiB
Markdown
219 lines
7.7 KiB
Markdown
# CLEO - Application de gestion de devis
|
|
|
|
## Vue d'ensemble
|
|
|
|
CLEO est une application web de gestion de devis développée en PHP 8.3 pour les PME. Elle utilise une architecture MVC classique avec un framework maison appelé "d6".
|
|
|
|
**Version actuelle** : 2.0.1 (migration complétée le 12 septembre 2025)
|
|
|
|
## Architecture technique
|
|
|
|
### Stack technologique
|
|
- **Langage** : PHP 8.3
|
|
- **Architecture** : MVC (Model-View-Controller)
|
|
- **Framework** : Framework maison "d6"
|
|
- **Base de données** : MariaDB 11.4
|
|
- **Connexion DB** : PDO avec requêtes préparées
|
|
- **Configuration** : Variables d'environnement (.env)
|
|
- **Gestion des dépendances** : Composer
|
|
- **Bibliothèques principales** :
|
|
- PHPMailer 6.8 (envoi d'emails)
|
|
- PHPSpreadsheet 1.28 (export/import Excel)
|
|
- phpseclib 3.0 (fonctions de sécurité)
|
|
|
|
### Structure des dossiers
|
|
```
|
|
cleo/
|
|
├── config/ # Configuration de l'application
|
|
│ ├── conf.php # Configuration principale (DB, paths, etc.)
|
|
│ └── init.php # Initialisation et définition des constantes
|
|
├── controllers/ # Contrôleurs MVC
|
|
│ ├── cjx*.php # Contrôleurs AJAX
|
|
│ └── c*.php # Contrôleurs standards
|
|
├── models/ # Modèles de données
|
|
├── views/ # Vues et templates
|
|
│ └── layouts/ # Layouts réutilisables
|
|
├── pub/ # Ressources publiques
|
|
│ └── res/
|
|
│ └── d6/ # Framework d6
|
|
├── vendor/ # Dépendances Composer
|
|
└── index.php # Point d'entrée principal
|
|
```
|
|
|
|
## Fonctionnalités métier
|
|
|
|
### Modules principaux
|
|
1. **Gestion des devis** (`cdevis.php`, `mdevis.php`, `vdevis.php`)
|
|
- Création, modification, duplication de devis
|
|
- Workflow de validation multi-niveaux
|
|
- Historisation des modifications
|
|
- Calcul automatique des marges
|
|
- Gestion des remises par paliers de quantité
|
|
|
|
2. **Gestion des clients** (`cclients.php`)
|
|
- Base clients avec contacts
|
|
- Segmentation par secteur géographique
|
|
- Types de clients paramétrables
|
|
- Import/export de données
|
|
|
|
3. **Gestion des marchés** (`cmarches.php`)
|
|
- Catalogue de marchés
|
|
- Association aux devis
|
|
- Visibilité paramétrable par rôle
|
|
|
|
4. **Administration** (`cusers.php`, `csap.php`)
|
|
- Gestion des utilisateurs
|
|
- Système de rôles et permissions
|
|
- Interface d'administration
|
|
|
|
### Système de rôles
|
|
- **DIR-CO** (Direction commerciale) : Accès complet, vision globale
|
|
- **DV** (Directeur des ventes) : Gestion de son équipe de RR
|
|
- **RR** (Responsable régional) : Gestion de ses propres devis
|
|
- **Admin** (rôle 90) : Administration système
|
|
|
|
## Base de données
|
|
|
|
### Architecture actuelle
|
|
- **Base unique** : `cleo` sur le container `maria3`
|
|
- **Connexion** : PDO avec pattern Singleton
|
|
- **Sécurité** : Requêtes préparées systématiques
|
|
|
|
### Tables principales
|
|
- `devis` : Table principale des devis
|
|
- `devis_produits` : Lignes de produits des devis
|
|
- `devis_histo` : Historique des modifications
|
|
- `clients` : Base clients
|
|
- `produits` : Catalogue produits
|
|
- `produits_familles` : Familles de produits avec marges
|
|
- `marches` : Référentiel des marchés
|
|
- `users` : Utilisateurs et hiérarchie
|
|
- `x_*` : Tables de référence (statuts, types, etc.)
|
|
- `y_pages` : Configuration des pages/routes
|
|
|
|
## Points de sécurité
|
|
|
|
### Vulnérabilités corrigées (v2.0.1)
|
|
|
|
✅ **1. Stockage des mots de passe**
|
|
- Credentials externalisés dans `.env`
|
|
- Variables d'environnement utilisées systématiquement
|
|
|
|
✅ **2. Protection contre les injections SQL**
|
|
- Migration complète vers PDO
|
|
- Requêtes préparées dans la classe `Database`
|
|
- Pattern Singleton pour la connexion
|
|
|
|
✅ **3. Gestion des erreurs sécurisée**
|
|
- Classe `Database` avec gestion d'erreurs centralisée
|
|
- Logging contrôlé par variables d'environnement
|
|
- Mode debug désactivable en production
|
|
|
|
### Vulnérabilités restantes à traiter
|
|
|
|
#### 1. Injections SQL résiduelles
|
|
- **Localisation** : Certains contrôleurs (`controllers/cjx*.php`)
|
|
- **Problème** : Concaténations directes dans certaines requêtes complexes
|
|
- **Recommandation** : Audit complet et migration progressive
|
|
|
|
#### 2. Configuration IP en dur
|
|
- **Localisation** : `config/conf.php`
|
|
- **Problème** : Certaines IPs encore hardcodées
|
|
- **Recommandation** : Migration complète vers `.env`
|
|
|
|
### Points positifs de sécurité
|
|
- Utilisation de `password_hash()` avec bcrypt pour les mots de passe utilisateurs
|
|
- Fonction `nettoie_input()` pour la sanitisation des entrées
|
|
- Gestion des sessions PHP native
|
|
- Contrôle d'accès basé sur les rôles
|
|
|
|
## Performances et optimisations
|
|
|
|
### Points d'attention
|
|
1. **Requêtes non optimisées** : Pas de pagination visible dans les listes
|
|
2. **Absence de cache** : Requêtes répétitives non mises en cache
|
|
3. **Chargement des données** : Chargement complet des listes sans limite
|
|
|
|
### Recommandations
|
|
- Implémenter une pagination côté serveur
|
|
- Ajouter un système de cache (Redis/Memcached)
|
|
- Optimiser les requêtes avec des index appropriés
|
|
- Utiliser le lazy loading pour les données volumineuses
|
|
|
|
## Qualité du code
|
|
|
|
### Points forts
|
|
- Structure MVC claire et cohérente
|
|
- Séparation des responsabilités respectée
|
|
- Nommage cohérent des fichiers et fonctions
|
|
- Utilisation de Composer pour les dépendances
|
|
|
|
### Axes d'amélioration
|
|
1. **Standards PHP modernes**
|
|
- Absence de namespaces
|
|
- Pas d'autoloading PSR-4
|
|
- Manque de typage strict PHP 8.3
|
|
|
|
2. **Documentation**
|
|
- Peu de commentaires PHPDoc
|
|
- Absence de documentation API
|
|
- Pas de README technique
|
|
|
|
3. **Tests**
|
|
- Aucun test unitaire visible
|
|
- Pas de tests d'intégration
|
|
- Absence de CI/CD
|
|
|
|
4. **Gestion des erreurs**
|
|
- Try/catch non systématiques
|
|
- Logging basique via `eLog()`
|
|
- Pas de monitoring applicatif
|
|
|
|
## Plan d'amélioration recommandé
|
|
|
|
### Court terme (Sécurité - En cours)
|
|
1. ✅ Migrer les credentials vers des variables d'environnement
|
|
2. ✅ Remplacer les requêtes SQL par des requêtes préparées (classe Database)
|
|
3. ✅ Implémenter une gestion d'erreurs sécurisée
|
|
4. ⏳ Auditer et corriger les failles XSS potentielles
|
|
|
|
### Moyen terme (Qualité et maintenabilité)
|
|
1. Migrer vers une structure PSR-4 avec namespaces
|
|
2. Implémenter des tests unitaires (PHPUnit)
|
|
3. Ajouter une documentation PHPDoc complète
|
|
4. Mettre en place un système de logging structuré (Monolog)
|
|
|
|
### Long terme (Evolution et performance)
|
|
1. Considérer la migration vers un framework moderne (Symfony/Laravel)
|
|
2. Implémenter une API REST pour découpler front/back
|
|
3. Ajouter un système de cache performant
|
|
4. Mettre en place un pipeline CI/CD
|
|
|
|
## Architecture de déploiement
|
|
|
|
### Environnement DEV (Actuel - IN3)
|
|
- **Container `dva-front`** : Application PHP 8.3 + Nginx (Alpine Linux)
|
|
- IP : 13.23.33.42
|
|
- MariaDB : **Supprimé** (12/09/2025)
|
|
- **Container `maria3`** : Base de données MariaDB 11.4
|
|
- IP : 13.23.33.4
|
|
- Base : `cleo`
|
|
|
|
### Environnement PROD (Futur - IN4)
|
|
- **Container `nx4`** : Application PHP
|
|
- **Container `maria4`** : Base de données
|
|
|
|
## Conclusion
|
|
|
|
CLEO v2.0.1 représente une évolution majeure avec la migration réussie vers une architecture sécurisée :
|
|
- ✅ Base de données unique et centralisée
|
|
- ✅ Connexions PDO avec requêtes préparées
|
|
- ✅ Configuration externalisée
|
|
- ✅ Séparation application/base de données
|
|
|
|
Les priorités de sécurité critiques ont été adressées. L'application peut maintenant évoluer sereinement vers des standards plus modernes tout en maintenant sa stabilité opérationnelle.
|
|
|
|
---
|
|
|
|
*Document mis à jour le 12 septembre 2025*
|
|
*Version 2.0.1 - Post-migration* |