HTML Sanitizer API

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Drei Hochrufe auf (Entwurfsphase) Fortschritte bei einer Sanitizer API! Es ist ein unumstößliches Gesetz, dass man Benutzereingaben nicht trauen kann. Und tatsächlich hat jede Anwendung, an der ich je gearbeitet habe, sich mit bösartigen Akteuren befasst, die versucht haben, schädlichen Code einzuschleusen und auszuführen, wo er nicht hingehört.

Es ist die Aufgabe des Webentwicklers, Benutzereingaben zu bereinigen, bevor sie wieder auf der Seite verwendet (oder gespeichert oder serverseitig genutzt) werden. Dies geschieht normalerweise mit eigenem Code oder heruntergeladenen Bibliotheken, die helfen. Wir schreiben vielleicht einen regulären Ausdruck, um alles zu entfernen, was wie HTML (oder Ähnliches) aussieht, was das Risiko von Fehlern birgt und dass diese bösartigen Akteure einen Weg finden, das zu umgehen, was unser Code tut.

Anstatt auf Benutzer-Bibliotheken oder unser eigenes Herumgehampel zu setzen, könnten wir den Browser machen lassen

// some function that turns a string into real nodes
const untrusted_input = to_node("<em onclick='alert(1);'>Hello!</em>");

const sanitizer = new Sanitizer();
sanitizer.sanitize(untrusted_input);  // <em>Hello!</em>

Dann soll es im Laufe der Zeit weiterhin eine Browser-Verantwortung bleiben. Wie im Entwurfsbericht heißt:

Der Browser weiß ziemlich gut, wann er Code ausführen wird. Wir können die User-Space-Bibliotheken verbessern, indem wir dem Browser beibringen, wie er HTML aus einer beliebigen Zeichenfolge auf sichere Weise rendern kann, und dies auf eine Weise tun, die viel wahrscheinlicher mit der eigenen sich ändernden Parser-Implementierung des Browsers gepflegt und aktualisiert wird.

So etwas sind Webstandards vom Feinsten. Man entdeckt etwas Ärgerliches (und/oder Gefährliches), das unzählige Leute tun müssen, und greift ein, um es sicherer, schneller und besser zu machen.

Direkter Link →