Ce projet présente une application web volontairement vulnérable afin de démontrer certaines failles de sécurité courantes. Les failles incluent des risques liés à la gestion des erreurs, au stockage des mots de passe, ainsi que d'autres vulnérabilités comme le Cross-Site Scripting (XSS).
L'objectif est de montrer comment ces failles peuvent être exploitées et comment les corriger.
WARNING: J'ai utilisé ChatGPT pour me créer l'init_db avec SQLlite et sa connection afin de gagner du temps sur cette partie, générer mon CSS et ce README.md.
Le site est vulnérable aux attaques XSS. Lorsqu'un utilisateur soumet un message via le formulaire, le message est affiché sans aucune forme de validation ou d'échappement. Cela permet à un attaquant de soumettre un script JavaScript malveillant (par exemple, <script>alert('XSS')</script>), ce qui pourrait être exécuté dans le navigateur des autres utilisateurs.
Solution proposée :
- Utiliser des fonctions d'échappement pour les caractères spéciaux avant d'afficher les données envoyées par l'utilisateur.
- Par exemple, utiliser
escape().
Les mots de passe sont stockés en clair dans la base de données. Cela représente une énorme faille de sécurité en cas de vol de la base de données, car les mots de passe des utilisateurs seraient exposés.
Solution proposée :
- Hacher les mots de passe avant de les stocker dans la base de données à l'aide d'une bibliothèque comme
bcrypt.
Lorsqu'une erreur se produit, le message d'erreur est renvoyé dans la réponse HTTP, ce qui peut donner des informations sensibles sur la structure du serveur ou de l'application.
Solution proposée :
- Masquer les détails des erreurs en production. Fournir un message générique sans détails techniques.
Les explications des différentes failles et solutions sont directement incluses dans le code source. Les commentaires dans le fichier index.js expliquent chaque vulnérabilité et proposent des solutions pour y remédier. Tu y trouveras des sections spécifiques pour chaque problème de sécurité mentionné ci-dessus.
- Clone ce dépôt sur ton ordinateur.
- Installe les dépendances en exécutant
npm install. - Lance l'application avec la commande
npm start. - Ouvre un navigateur et accède à
http://localhost:3000.
L'application sera accessible localement et présentera les différentes failles de sécurité décrites ci-dessus.