Dipende dal contesto in cui avviene l'iniezione.
Ovviamente, se l'iniezione avviene nel contesto di un contenuto di elementi come questo:
<p>Your search for "❌" has returned the following results:</p>
<
è richiesto per passare dal testo al markup. Ma anche qui, se echi l'input dell'utente in <script>
, ad esempio:
<script>var search = "❌";</script>
Avrai bisogno di cercare altri personaggi come non sei nel contesto del testo normale. Qui dovresti fare attenzione ai caratteri che sono speciali all'interno di stringhe di stringhe JavaScript così come certe sequenze che possono denotare il script
tag finale dell'elemento , ad es </script>
o </script/
.
Allo stesso modo, se si stampa l'input dell'utente nel valore dell'attributo di un elemento:
<input type="text" name="search" value="❌">
Qui devi occuparti dei personaggi speciali per i doppi valori citati valori degli attributi , ovvero la citazione delimitando "
. Se utilizzi virgolette singole o nessuna virgolette, è necessario applicare regole diverse.
Inoltre, non devi solo cercare la sintassi ma anche la semantica. Come se esistessero gli% URI dijavascript:
e% co_de che possono essere usati per XSS. Oppure c'è un JavaScript che usa parte dei dati forniti dall'utente per una valutazione, o il recupero di qualche altro codice di script, ecc. Ci sono centinaia di esempi .
Quindi sempre prendi in considerazione il contesto in cui vuoi mettere i dati forniti dall'utente e codifica i dati in modo corrispondente.