2010-05-25 12 views
6

Ho letto su XSS e ho creato un semplice modulo con un testo e invio input, ma quando eseguo <script>alert();</script> su di esso, non succede niente, il server ottiene quella stringa e basta.Che cosa rende un input vulnerabile a XSS?

Cosa devo fare per renderlo vulnerabile ?? (poi imparerò cosa non dovrei fare)

Cheers.

+0

Si sta utilizzando un linguaggio lato server? – StingyJack

+0

.NET (ma non ASP.NET) – vtortola

risposta

20

Effettivamente, lascia che sia il server ad emetterlo in modo che la stringa di input venga effettivamente incorporata nell'origine HTML che viene restituita al client.

esempio PHP:

<!doctype html> 
<html lang="en"> 
    <head><title>XSS test</title></head> 
    <body> 
     <form><input type="text" name="xss"><input type="submit"></form> 
     <p>Result: <?= $_GET['xss'] ?></p> 
    </body> 
</html> 

JSP esempio:

<!doctype html> 
<html lang="en"> 
    <head><title>XSS test</title></head> 
    <body> 
     <form><input type="text" name="xss"><input type="submit"></form> 
     <p>Result: ${param.xss}</p> 
    </body> 
</html> 

In alternativa è possibile visualizzare nuovamente il valore negli elementi di input, che è anche spesso visto:

<input type="text" name="xss" value="<?= $_GET['xss'] ?>"> 

resp.

<input type="text" name="xss" value="${param.xss}"> 

questo modo "strano" stringhe di attacco come "/><script>alert('xss')</script><br class=" funzioneranno perché il server renderà dopo tutto come

<input type="text" name="xss" value=""/><script>alert('xss')</script><br class=""> 

soluzioni XSS di prevenzione sono tra gli altri htmlspecialchars() e fn:escapeXml() rispettivamente per PHP e JSP. Quelli sostituiranno tra gli altri <, > e " entro il &lt;, &gt; e &quot; in modo che l'input dell'utente finale non finisca per essere letteralmente incorporato nella sorgente HTML, ma invece viene visualizzato appena inserito.

19

Fare in modo che il server restituisca l'input al client.

+2

Ho letto "Avere il server restituisce l'input al client.", E ho pensato wow, questa è la risposta più semplice e definitiva a questa domanda. –

4

Si dovrebbe "inserire" lo script. Quindi, se avete un testo-input, si dovrebbe mettere nella forma:

" /> <script>alert();</script> 

In questo modo è prima chiudere l'attributo del HTML esistente e poi iniettare il proprio codice. L'idea è di sfuggire alle citazioni.

+0

Non è quello che sta chiedendo. Sa come eseguire l'attacco, chiede cosa rende vulnerabile un input. – 0112

2

Google ha creato un tutorial davvero eccezionale che copre XSS e altre vulnerabilità di sicurezza here. Può aiutarti a capire come questi problemi vengono sfruttati nelle applicazioni reali.

+2

Il link è ora morto ... – mix3d

1

tre semplici cose:

  1. Se non sei emissione dei dati non attendibili alla pagina ad un certo punto non v'è alcuna possibilità per XSS
  2. Tutti i vostri dati (untusted forme, le query string, intestazioni, ecc) deve essere convalidato in una whitelist per garantire che rientri in un intervallo accettabile
  3. Tutti gli output sullo schermo devono essere codificati con una libreria appropriata (ad esempio Anti-XSS per .NET) nella lingua appropriata (HTML, CSS, JS, ecc.).

Altre informazioni con esempi in OWASP Top 10 for .NET developers part 2: Cross-Site Scripting (XSS).

Problemi correlati