Un audit utile n'est pas un théâtre d'outils au vert. Il s'agit de trouver ce qui peut faire tomber l'application ou filtrer des données, de le documenter avec des preuves, et de prioriser les corrections.
Cette méthodologie s'applique aux applications PHP/Laravel, Node.js et WordPress (multisite, Elementor, boutiques avec paiements). En présence d'ecommerce ou de passerelles locales, elle inclut checkout et webhooks — la même surface couverte par les paiements en ligne.
Répartition des 48 heures
Heures 0–4 : carte de surface
- Inventaire des routes publiques (web + API).
- Formulaires, uploads, webhooks de paiement, cron endpoints.
- Headers actuels, cookies, redirections.
- Sur WordPress : version, thème enfant, plugins actifs, utilisateurs administrator.
- En multisite : sites, super-admins et plugins réseau.
Heures 4–16 : authentification et session
- Reset de mot de passe, énumération d'utilisateurs, rate limiting.
- Cookies
Secure/HttpOnly/SameSite. - CSRF sur les formulaires qui changent l'état.
- JWT :
exp, rotation, stockage non sécurisé danslocalStorage. - Admin WordPress ou Filament/Horizon exposé sans MFA.
Heures 16–32 : injection et logique métier
- SQL / ORM mal utilisé, XSS stocké, path traversal.
- Mass assignment dans Laravel (
$fillable/$guarded). - IDOR : peut-on voir la commande
#id+1? - Paiements : confirmer que le montant n'est pas fait confiance au client.
- Upload : type réel du fichier, pas seulement l'extension.
Heures 32–48 : dépendances et livrable
composer/npm auditavec discernement.- Plugins WordPress abandonnés ou avec advisories connus.
- Secrets dans le repo,
.envexposé, backups publics. - Rapport P0/P1/P2 + plan de remédiation par sprint.
Checklist pratique
- Y a-t-il
.env,.gitou des backups accessibles par URL ? - Login, reset et APIs sensibles ont-ils du rate limiting ?
- Les cookies de session ont-ils les bons flags en HTTPS ?
- Le CSRF est-il actif sur les formulaires qui changent l'état ?
- Les policies/capabilities existent-elles et sont-elles appelées sur chaque route ?
- Les uploads valident-ils le MIME réel ?
- Les webhooks de paiement valident-ils signature/origine et sont-ils idempotents ?
- Les headers de sécurité (CSP, HSTS) existent-ils sans casser le front ?
- Les dépendances critiques ont-elles un responsable de mise à jour ?
- Le déploiement peut-il réintroduire le même secret ou un vieux plugin ?
Laravel : points de revue
- Validation avec Form Requests sur toutes les entrées API.
- Autorisation : Policies/Gates sur show/update/destroy.
- Mass assignment : modèles avec
$guarded = []ou fillables dangereux. - Fichiers :
Storagesur disque privé ; URLs signées. - Files d'attente avec backoff et dead-letter ; payloads sans PII inutile.
APP_DEBUG=falseen prod ; Telescope/Horizon non publics.
WordPress : points de revue
- Supprimer l'utilisateur
admingénérique ; revoir les rôles ; 2FA sur comptes privilégiés. - XML-RPC : désactiver s'il n'y a pas d'app légitime qui en a besoin.
- REST : endpoints utilisateurs qui filtrent des infos.
- Uploads : blocage d'exécution dans
uploads. - WooCommerce : plugins de passerelle à jour ; webhooks avec permissions minimales.
Format du livrable
| Priorité | Critère | Exemple |
|---|---|---|
| P0 | Exploitable maintenant / impact élevé | RCE, SQLi, paiement manipulable, .env public |
| P1 | Risque élevé | XSS stocké, IDOR de commandes, CSRF sur actions sensibles |
| P2 | Durcissement | Headers incomplets, vieux plugins pas encore exposés |
Chaque constat inclut : où, comment reproduire, risque, correctif suggéré et effort relatif. Lié à DevOps et Coolify et la cybersécurité .