Cette démonstration est protégée. Veuillez saisir le mot de passe reçu lors de votre achat.
Mot de passe incorrect.
⚠ SITE VOLONTAIREMENT VULNÉRABLE — Usage pédagogique uniquement
🔴 Site de démonstration — Ne pas utiliser en production
DemoBank
Banque en ligne fictive — Comprendre les failles en les testant soi-même
Comment ça marche ? Ce site reproduit les 5 failles les plus courantes sur le web. Chaque section vous explique la faille en français simple et vous permet de la tester concrètement. Aucune donnée réelle n'est utilisée.
SQL Injection Connexion — Fuite de données
En clair : Le champ identifiant est mal protégé. Au lieu de taper un vrai login, on peut taper une "formule magique" qui force l'ouverture de la base de données. 👉 Teste : Tape admin' OR '1'='1 dans l'identifiant, n'importe quoi en mot de passe, et clique.
XSS stockée Commentaires — Injection de code
En clair : Les commentaires ne sont pas nettoyés. On peut y glisser du code JavaScript malveillant. Si un admin le lit, son compte peut être volé. 👉 Teste : Copie <script>alert('Hacké !')</script> dans le champ et publie.
CSRF Transfert sans confirmation
En clair : Pas de jeton de sécurité. Un attaquant peut fabriquer un faux bouton qui, si vous cliquez, exécute une action (comme un virement) sans que vous le sachiez. 👉 Teste : Clique sur "Transférer" — normalement, on devrait te demander une confirmation, mais là ça part direct.
IDOR Accès aux comptes des autres
En clair : Chaque compte a un numéro (ID). En changeant simplement ce chiffre dans la page, on peut voir le compte des autres clients. La banque n'a pas vérifié que c'est bien le vôtre. 👉 Teste : Clique sur les différents numéros pour voir les comptes des autres utilisateurs.
En clair : Des fichiers importants sont laissés accessibles à tout le monde. C'est comme laisser la clé de votre coffre sous le paillasson. Voici ce qu'un attaquant peut trouver :
📄 /backup/database.sql — Toute la base (clients, comptes, mots de passe)
📄 /config.php — Identifiants de connexion à la base
📄 /.git/config — Historique complet du code (contient les anciens mots de passe)
', '')); } catch(e) {}
} else {
r.className = 'result-box info';
r.innerHTML = '✓ Commentaire publié : "' + val + '"';
}
}
function testCSRF() {
const r = document.getElementById('csrfResult');
r.className = 'result-box error';
r.innerHTML = '❌ VIREMENT EFFECTUÉ ! — 1 000 € envoyés vers le compte de l\'attaquant.
💡 En vrai : un attaquant mettrait ce bouton sur une fausse page ou un e-mail piégé. Si vous cliquez PENDANT que vous êtes connecté à votre banque, le transfert part sans que vous le voyiez. La solution : un code de confirmation unique à chaque action (token CSRF).';
}
function switchIDOR(num) {
const accounts = {
1: { name: 'Utilisateur #1 (moi)', balance: '1 234,56 €' },
2: { name: 'Utilisateur #2 (Nathalie D.)', balance: '42 890,00 €' },
3: { name: 'Utilisateur #3 (Société ABC SARL)', balance: '156 200,00 €' },
4: { name: 'Utilisateur #4 (Marc L.)', balance: '12 450,00 €' }
};
const acc = accounts[num];
document.getElementById('idorAccount').textContent = acc.name;
document.getElementById('idorBalance').textContent = acc.balance;
const r = document.getElementById('idorResult');
r.style.display = 'block';
r.className = 'result-box info';
if (num === 1) {
r.innerHTML = '✓ Compte personnel affiché normalement.';
} else {
r.innerHTML = '❌ ACCÈS NON AUTORISÉ — Vous pouvez voir le compte de ' + acc.name + ' alors que ce n\'est pas le vôtre.
💡 En vrai : la banque aurait dû vérifier que l\'ID dans l\'URL correspond bien à votre session. Cette faille s\'appelle IDOR (Insecure Direct Object Reference). Corrigez-la en vérifiant les droits à chaque accès.';
}
}
function showExposed(type) {
const r = document.getElementById('exposedResult');
r.style.display = 'block';
r.className = 'result-box error';
const content = {
dump: '📄 /backup/database.sql (extrait)
INSERT INTO users VALUES (1,\'admin\',\'827ccb0eea8a706c4c34a16891f84e7b\',\'admin@demobank.fr\'); INSERT INTO users VALUES (2,\'nathalie\',\'5f4dcc3b5aa765d61d8327deb882cf99\',\'nathalie@email.com\'); INSERT INTO comptes VALUES (1,1,1234.56); INSERT INTO comptes VALUES (2,2,42890.00);
💡 En vrai : ces fichiers contiennent les mots de passe (souvent en clair ou faiblement hashés), les IBAN, les adresses, etc. C\'est un jackpot pour un attaquant.',
config: '📄 /config.php (contenu)
💡 En vrai : l\'attaquant peut maintenant se connecter directement à votre base de données et la voler entièrement, la modifier ou la supprimer.',
git: '📄 /.git/config (historique exposé)
[remote "origin"] url = https://github.com/demobank/site.git [branch "main"] [credential] helper = wincred Les commits précédents contiennent : - Ancien mot de passe : "DemoBank2024!" - Clé API : "sk_live_xxxxx"
💡 En vrai : avec l\'historique Git, on voit TOUTES les versions du code, y compris les mots de passe et clés API qui ont été "supprimés" récemment mais qui sont toujours dans l\'historique.'
};
r.innerHTML = content[type];
}