La sécurité pour les développeurs : coder de façon sécurisée
La majorité des failles de sécurité proviennent du code applicatif. En tant que développeur, intégrer la sécurité dès le début du développement est bien plus efficace et moins coûteux que de corriger après coup.
Le coût des failles
- Corriger une faille en développement : 1x le coût
- Corriger en test : 6x
- Corriger en production : 15x
- Corriger après une brèche : 100x
Le Top 10 OWASP — les failles les plus critiques
| Rang | Faille | Exemple concret |
|---|---|---|
| 1 | Broken Access Control | Un utilisateur accède aux données d’un autre via l’URL |
| 2 | Cryptographic Failures | Mots de passe stockés en clair dans la base |
| 3 | Injection (SQL, XSS) | Données utilisateur insérées directement dans une requête SQL |
| 4 | Insecure Design | Pas de limitation du nombre de tentatives de connexion |
| 5 | Security Misconfiguration | Mode debug activé en production |
Pratique 1 : Prévenir l’injection SQL
// DANGEREUX — ne jamais faire :
query = « SELECT * FROM users WHERE id = » + userId;
// SÉCURISÉ — requête préparée :
query = « SELECT * FROM users WHERE id = ? »;
stmt = db.prepare(query);
stmt.execute([userId]);
Pratique 2 : Prévenir le XSS
// DANGEREUX :
element.innerHTML = userInput;
// SÉCURISÉ :
element.textContent = userInput;
// Ou utiliser DOMPurify pour du HTML :
element.innerHTML = DOMPurify.sanitize(userInput);
Pratique 3 : Gérer les mots de passe
// JAMAIS : stockage en clair ou MD5/SHA1
password_hash = md5(password); // DANGEREUX
// TOUJOURS : bcrypt, scrypt ou Argon2
// Python :
from bcrypt import hashpw, gensalt
hashed = hashpw(password.encode(), gensalt())
// PHP (WordPress) :
$hash = wp_hash_password($password);
Pratique 4 : Sécuriser les API
- Authentification par tokens JWT ou OAuth2
- Rate limiting : limitez les requêtes par IP
- Validation des entrées : vérifiez type, taille, format
- HTTPS obligatoire : jamais d’API en HTTP
- CORS : configurez les origines autorisées
Pratique 5 : Gestion des secrets
- Ne mettez JAMAIS de clés API, mots de passe ou tokens dans le code source
- Utilisez des variables d’environnement (.env)
- Ajoutez
.envà votre.gitignore - En production : utilisez un gestionnaire de secrets (Vault, AWS Secrets Manager)
Checklist sécurité pour chaque projet
- Requêtes SQL paramétrées (pas de concaténation)
- Validation et échappement de toutes les entrées utilisateur
- Mots de passe hashés avec bcrypt/Argon2
- HTTPS activé partout
- Secrets dans des variables d’environnement
- Headers de sécurité configurés (CSP, X-Frame-Options)
- Dépendances à jour (npm audit, pip audit)
- Logs de sécurité activés
- Tests de sécurité automatisés (SAST/DAST)