L'XSS riflesso è possibile se il parametro fa parte dell'URL (di solito nella stringa della query) o parte del corpo del messaggio in una richiesta POST.
I parametri nelle intestazioni o nei cookie di solito non possono essere utilizzati in un attacco XSS riflesso perché non è possibile per un utente malintenzionato impostare queste intestazioni (le intestazioni personalizzate non possono essere inviate tra domini diversi senza l'uso di CORS).
Non sempre richiedono un clic dalla vittima direttamente sull'URL infetto. Di 'se un sito web che l'utente visita di solito è stato compromesso, l'autore dell'attacco può aggiungere
<form method="post" action="https://example.com/submit">
<input type="hidden" name="textarea1" value="<input onclick=alert(document.cookie)>" />
</form>
<script>
document.forms[0].submit();
</script>
all'HTML (attacco buca d'acqua).
Si noti che se una pagina Web è vulnerabile a un corpo POST riflesso in attacco XSS, allora questo può anche essere mitigato tramite protezioni anti-CSRF invece della corretta codifica dell'output HTML (anche se nello spirito di difesa in profondità suggerirei anche di fissare la vera vulnerabilità XSS perché potrebbero esserci altri vettori di attacco che potrebbero sfruttare questo).