Standards PSR-12, OWASP Top 10, conventions PR, checklists déploiement et performance.
// ✅ BON — Standards PSR-12 + Harambee conventions namespace App\Services; class InvestissementService { public function create(Investisseur $investisseur, Project $project, float $montant): Investissement { return DB::transaction(function () use ($investisseur, $project, $montant) { $this->assertCanInvest($investisseur, $project, $montant); $investissement = Investissement::create([ 'investisseur_id' => $investisseur->id, 'project_id' => $project->id, 'montant' => $montant, 'reference' => $this->generateReference(), ]); event(new InvestissementCreated($investissement)); return $investissement; }); } }
| Règle | Application Harambee |
|---|---|
| 4 espaces, pas de tabs | EditorConfig + PHP CS Fixer configurés |
| Accolade ouvrante sur nouvelle ligne (classes/méthodes) | Vérification automatique CI |
| Une classe par fichier, namespace correspondant au chemin | PSR-4 autoloading Composer |
| PHPDoc sur toutes les méthodes publiques | @param, @return, @throws obligatoires |
| Longueur de ligne max 120 caractères | PHP CS Fixer rule: line_length |
| snake_case pour propriétés DB, camelCase pour méthodes PHP | Convention Eloquent respectée |
php artisan test)php-cs-fixer fix --dry-run)dd() ou var_dump() oublié.env.exampledown() fonctionnelle)| # | Vulnérabilité | Sévérité | Mitigation Harambee |
|---|---|---|---|
| A01 | Broken Access Control | Critique | Laravel Policies + middleware AdminOnly + RBAC sur chaque route |
| A02 | Cryptographic Failures | Critique | bcrypt (rounds=12), HTTPS forcé, secrets dans .env chiffré, S3 SSE-S3 |
| A03 | Injection (SQL/XSS) | Critique | Eloquent ORM (PDO paramétré), Blade auto-escape, Input::validate() systématique |
| A04 | Insecure Design | Élevé | Threat modeling par module, revue architecture avant implémentation |
| A05 | Security Misconfiguration | Élevé | APP_DEBUG=false en prod, headers sécurité Nginx, .htaccess protect includes/ |
| A06 | Vulnerable Components | Élevé | Dependabot activé, composer audit en CI, mise à jour mensuelle deps |
| A07 | Auth Failures | Critique | Sanctum tokens, rate-limit 5 tentatives/min, 2FA TOTP, session timeout 2h |
| A08 | Software & Data Integrity | Moyen | Signature webhooks paiements, hachage documents KYC, SRI assets front |
| A09 | Security Logging Failures | Moyen | Laravel Log + audit trail DB, alertes Sentry, logs horodatés immuables |
| A10 | SSRF | Élevé | Allowlist URLs webhooks, validation domaines, pas d'URLs user dans HTTP client |
.env production vérifié et chiffrécomposer install --no-dev --optimize-autoloaderartisan down)npm run build)artisan migrate --force exécutéartisan config:cache et route:cacheartisan up)| Règle | Comment | Outils |
|---|---|---|
| Éviter les requêtes N+1 | Utiliser with() pour eager loading systématique | Laravel Debugbar, Telescope |
| Paginer les listes | ->paginate(20) ou ->cursorPaginate() sur toutes les listes | — |
| Cache Redis pour les données fréquentes | Cache::remember('categories', 3600, ...) | Redis, Laravel Cache |
| Jobs pour les opérations lentes | Envoi email, génération PDF, KYC asynchrone | Laravel Horizon |
| Index DB sur les colonnes de filtre | categorie_id, statut, date_fin, investisseur_id | Migration + EXPLAIN |
| Optimiser les assets | Vite + code splitting + lazy loading images | Vite, Lighthouse |