- Démonstration d'une faille XSS
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div> <h1>Demo xss</h1> </div> <div> <form action method="get" class="form"> <input type="text" name="name" id="name"> <input type="submit" value="Submit"> </form> <p class="content"></p> </div> <?php if(isset($_GET['name'])){ $name = $_GET['name']; echo "<p>" . $name . "</p>"; } ?> </body> </html>
- Démonstration de la correction
Utiliser les fonctionnalitées de nos langage de programmation pour échapper les caractères spéciaux dans le cas de php l'utilisation de la fonction htmlspecialchars
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div>
<h1>Demo xss</h1>
</div>
<div>
<form action method="get" class="form">
<input type="text" name="name" id="name">
<input type="submit" value="Submit">
</form>
<p class="content"></p>
</div>
<?php
if(isset($_GET['name'])){
$name = $_GET['name'];
// Échapper les caractères spéciaux pour prévenir les attaques XSS
$safe_name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
echo "<p>" . $safe_name . "</p>";
}
?>
</body>
</html>
Outils à disposition : XSS Strike
Initiation au attaque XSS cross-site scripting
Hackez Google !! Heu... Foogle !! Presque pareil.. 😅 Les dernieres étape sont très difficiles arretez vous à Angular ou Angular 2 XSS Game
Comment se protéger du XSS sur votre Framework (débat ouvert) ?
Réflexions et réponses apportées :
-
L'échappement des caractères spéciaux via les fonctions intégrées au langage de programmation utilisé ou via une librairie type DOM-Purify
-
Utilisation des CSP (Content Security Policy) authorisant uniquement les ressources voulu à se charger sur la page
-
Vérifiez que nos outils possèdent bien un échappement de caractères intégré
- exemple twig :
{{ exempleVariable }}
- Utilisation de JSX pour le rendu en react
- exemple twig :
-
SandBox nos ressource css et js dans un sous dommaine
-
Sandboxer l'execution des script dans des Iframe
Initiation au CSRF portswigger
Challenge Root me : CSRF - 0 protection
Implémentez un Token CSRF dans tous vos formulaires POST ! Pas d'exception !
Est-ce bien suffisant ?