Ich habe das etwas damit verbundene Frage div contenteditable, XSS lesen, aber seine Antworten über die XSS saftey von contenteditable nicht viel markieren. Insbesondere im Hinblick auf versehentliche (im Vergleich zu absichtlichen Cross-Site-Scripting). Mir ist natürlich bewusst, dass ich Benutzereingaben serverseitig bereinigen sollte.Ist das zufriedene HTML5-Attribut XSS-sicher?
TL.DR.: Kann ich sicher sein, dass der Benutzer nicht Gefahr nicht stehen einige externe Skript einzuführen (das heißt über Daten aus der Zwischenablage eingefügt.) Über eine Seite Element contenteditable
gesetzt werden? Stellt die Spezifikation sicher, dass jedes Markup, das in den Contenteditable eingefügt wird, bereinigt wird, bevor es in das DOM eingefügt wird?
Ich habe bemerkt, dass auf zwei wichtigen Browsern ich getestet, Chrom/Chrome und Firefox, dass er versehentlich ein aktiven Elemente in den contenteditable
Tag unmöglich zu sein scheint einzufügen. Ein Beispiel für eine solche accedental Einfügung ich zum Beispiel sein gedacht hätte:
- Benutzer kopiert eine Auswahl von DOM-Elemente aus einer Webseite und fügt sie in die
contenteditable
Element auf einer anderen Website. - Mitglieder gaben (auf Linux-Befehlszeile)
echo "<b onclick='alert("XSS");'>click me</b>" | xclip -t text/html -selection "clipboard"
und Pasten, die in diecontenteditable
.
Ein aktives Element würde alles wie:
- HTML-Auszeichnungs eine
<script>
- HTML-Auszeichnungs enthält Elemente mit Inline-Handler wie
onclick="alert(\"XSS\");"
- HTML-Auszeichnungs enthält JavaScript hrefs enthalten, wie
<a href="javascript:alert(\"XSS\")"> click me </a>
Jetzt ist meine Frage, zu sehen, dass contenteditable etwas sicher scheint, dass irgendein normaler XSS-Vektor eingefügt wird, wenn das beabsichtigt ist?
Ich habe einige specs/refs/whatever gelesen, wo es sich weder explizit erwähnt, dass contenteditable
verhindern sollte jede aktive Element in das DOM der Seite eingefügt werden, weder, dass es erlaubt sein würde. Dies lässt mich in Zweifel, ob ich die contenteditable Funktion verwenden sollte, da ich kein externes Javascript riskieren möchte, das in contenteditable
eingefügt wird. Beantworten Sie diese XSS-Sicherheit von contenteditable
ist der Kern dieser Frage.
aktualisieren Im Gegensatz zu den contenteditable
die eine ähnliche Funktion bietet Dokumente Attribut designMode
scheint spezifisch zu sein (siehe https://www.w3.org/TR/2008/WD-html5-20080610/web-browsers.html#designModeScriptBlocked) über die Javascript (daher XSS verhindert) deaktiviert werden.
UPDATE 2 Die jüngste Referenz/spec auf MDN zitiert ist https://html.spec.whatwg.org/multipage/interaction.html#contenteditable , die über irgendwelche Garantien seltsam indifferent ist, dass contenteditable
malicous JavaScript über Paste nicht einführen bietet.
Solange Sie die Eingabe auf der Serverseite sanieren, sehe ich nicht, warum jemand ein JavaScript in eine 'contenteditable' einfügen ist sogar ein Problem. Jeder kann die Dev Tools öffnen und JavaScript auf der Seite ausführen, das für einen XSS-Angriff ausreichen könnte, wenn die Server-Seite nicht eingerichtet ist, um dies zu verhindern. –
@DeepakKamat Ich stelle mir vor, dass (vorausgesetzt, der Benutzer ist angemeldet und hat bestimmte Privilegien, wie zum Beispiel Inhalte zu löschen), ich würde es problematisch finden, wenn das Einfügen eines bösartigen Skripts diese Privilegien erben würde. Was würden Sie sagen? Außerdem gehe ich davon aus, dass XSS Sicherheit auch die Sicherheit der Benutzerdaten (wie zB seiner Eingabedaten) eines bösartigen Skripts, wenn möglich über "contenteditable", dann xhr/send an böswillige Dritte weiterleiten kann. Sicher ist es nett, dass der Server kompromisslos ist, aber in meinem Verständnis auch XSS, das das Benutzerkonto/die Daten angreift, ist schlecht, daher meine Sorge – humanityANDpeace
Irgendein Grund, warum Sie Spezifikationen von 9 und vor einem halben Jahr anstelle von gegenwärtigen specs lesen? – BoltClock