2013-10-30 9 views
5

Ho un'area di testo HTML nella mia interfaccia utente (per un'applicazione web basata su Java) in cui un utente può immettere qualsiasi valore. Una volta salvato, viene visualizzato nella textarea (che è disabilitata) nel browser.È possibile un attacco XSS quando uno script viene visualizzato in un'area di testo HTML?

Se un utente immette uno script come testo libero nell'area di testo, verrà eseguito come script (anche se il valore è visualizzato nell'area di testo e non come etichetta/testo)?

+0

Vediamo il tuo codice. –

risposta

4

Dipende da come si imposta il valore di textarea. Nel codice HTML, il contenuto di textarea è il testo all'interno dell'elemento.

Ho creato un JSFiddle to demonstrate vari modi per cambiare il contenuto di un textarea

<div><textarea id="e1"></textarea></div> 
<div><textarea id="e2"></textarea></div> 
<div id="e3"/> 

var dangerous = '<scri' + 'pt>alert("Danger!");</scri' + 'pt>'; 
document.getElementById('e1').value = dangerous; 

document.getElementById('e2').innerHTML = dangerous; 

dangerous = '</textarea>' + dangerous; 
var content = '<textarea>' + dangerous + '</textarea>'; 
document.getElementById('e3').innerHTML = content; 

console.log('Done.'); 

Questo crea due textarea elementi con uno script all'interno (SAVE) e uno vuoto.

Nell'ultimo test, chiudo lo textarea nell'input e quindi aggiungo lo script. È interessante notare che l'impostazione innerHTML è sicura da utilizzare in questo caso: It doesn't execute scripts inserted in this way.

Quindi, se lo fai in JavaScript, sei abbastanza sicuro. Ma di solito, si esegue il rendering il DOM della pagina sul server e quindi è necessario assicurarsi di fuggire correttamente il contenuto della textarea perché:

String unfilteredInput = "</textarea><script>alert(\"Danger!\");</script>"; 

out.write("<textarea>"); 
out.write(content); 
out.write("</textarea>"); 

sarà eseguire lo script.

Nota: ho anche provato a dimostrare document.write() ma ciò non è consentito in un JSFiddle. Sono abbastanza sicuro che lo document.write() sia vulnerabile allo stesso attacco.

+1

+1 Sì, dipende se è impostato lato server o lato client, anche se hai ragione in quel 'document.write()' è anche vulnerabile. Un rapido esempio di questo qui: https://dl.dropboxusercontent.com/u/1075151/dwrite.htm (funziona in Chrome). – SilverlightFox

Problemi correlati