Das hängt davon ab, wie Sie den Wert der setzen. Im HTML-Code ist der Inhalt des textarea
der Text innerhalb des Elements.
Ich habe ein JSFiddle to demonstrate verschiedene Möglichkeiten geschaffen, den Inhalt eines mit einem Skript innerhalb Dadurch entstehen zwei textarea
Elemente 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.');
zu ändern (speichern) und einen leeren.
Im letzten Test schließe ich die textarea
in der Eingabe und dann das Skript anhängen. Interessanterweise ist die Einstellung innerHTML
in diesem Fall sicher zu verwenden: It doesn't execute scripts inserted in this way.
So lange wie Sie es in JavaScript tun, sind Sie ziemlich sicher. Aber in der Regel, können Sie das DOM der Seite auf dem Server übertragen und dann müssen Sie sicherstellen, dass Sie richtig den Inhalt der textarea
weil entkommen:
String unfilteredInput = "</textarea><script>alert(\"Danger!\");</script>";
out.write("<textarea>");
out.write(content);
out.write("</textarea>");
wird das Skript ausführen.
Hinweis: Ich habe auch versucht, document.write()
zu demonstrieren, aber das ist in einem JSFiddle nicht erlaubt. Ich bin mir ziemlich sicher, dass document.write()
für den gleichen Angriff anfällig ist.
Lassen Sie uns Ihren Code sehen. –