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.
fonte
2013-10-30 08:23:32
Vediamo il tuo codice. –