OWASP A01:2021 - Défis de Sécurité Web

# 🔐 Défis de Sécurité Web - E-Shop Vulnérable

Note : Pour réussir ces défis, vous devrez examiner le code source de la page et utiliser les outils développeur de votre navigateur.

## Guide Technique

Cette application simule une boutique en ligne avec différents défis de sécurité.

### Objectif

Votre mission est de naviguer à travers les différents scénarios de sécurité, d'identifier et d'exploiter des failles pour progresser.

### Scénarios Disponibles

- Manipulation des Prix : Exploitez la validation côté client pour ajuster les prix des produits.
- Rejeu de Session : Rejouez une session en manipulant les cookies pour accéder à un compte sans authentification.
- Condition de Course : Bypassez les contrôles de validation en envoyant plusieurs requêtes simultanées.

### Glossaire

### Glossaire des Termes Techniques

- Validation côté client : Processus de vérification des données effectué dans le navigateur de l'utilisateur, généralement avec JavaScript.
- Validation côté serveur : Vérification des données effectuée sur le serveur, considérée comme plus sécurisée car l'utilisateur ne peut pas la manipuler directement.
- Vulnérabilité : Faiblesse dans un système qui peut être exploitée pour causer un préjudice ou un comportement non désiré.
- Contrôle d'accès inapproprié : Situation où les restrictions d'accès aux ressources ne sont pas correctement mises en œuvre, permettant à des utilisateurs non autorisés d'accéder à des données ou des fonctionnalités.
- Outils développeur : Ensemble d'outils intégrés dans les navigateurs modernes pour aider les développeurs à tester et déboguer les applications web.
- Condition de course : Situation où le comportement d'un système dépend de l'ordre ou du timing des événements, souvent exploitable pour contourner les contrôles.

### Liens Utiles

- OWASP Top 10 - Contrôle d'Accès Inapproprié
- Outils de développement Firefox
- Outils de développement Chrome

### Code Exemple Vulnérable

// Extrait de code vulnérable const products = [ { id: "ARD01", name: "Arduino UNO", price: 25.00 }, // ... ]; function validatePurchase() { let totalPrice = 0; cart.forEach(item => { totalPrice += item.price; }); if (totalPrice <= currentBudget) { // Autoriser l'achat } else { // Rejeter l'achat } }

### Code Exemple Sécurisé

// Extrait de code sécurisé async function validatePurchase() { let isValid = true; for (let item of cart) { const serverPrice = await API.getPrice(item.productId); if (serverPrice !== item.price) { isValid = false; break; } } if (isValid) { // Autoriser l'achat } else { // Rejeter l'achat } }