Verhindern, dass script-injection mit innerHTML
Ich geschrieben habe, ein micro-templating-Dienstprogramm, mit innerHTML zu injizieren html-Fragmente in eine Webseite, basierend auf Benutzereingaben (entweder nur-text-strings oder html-Zeichenfolgen).
Meine größte Sorge ist das Risiko, dass bösartige script-injection. Das Skript kann eingefügt werden über ein script-tag, oder in einen inline-event (img onload div onmouseover zum Beispiel).
Gibt es eine Möglichkeit zur Bereinigung der html-string, um zu verhindern, dass solche Injektionen? Auch gibt es andere script-injection-Methoden, die ich beachten sollte?
Nein, entfernen
Ich bin in keiner position zu vertreten, mich als ein Experte, aber mit
richtig, aber das Ziel, in meinem Fall ist die sichere html als html gerendert.
script
- tags ist nicht genug, wenn Sie möchten, um zu verhindern, dass böswillige Benutzer tun bösartige Dinge. Zum Beispiel <a href="http://yoursite.org" onclick="javascript:window.open('http://malicious.example.org')">An innocent looking link!</a>
keine script
tag und ist einfach nur fies.Ich bin in keiner position zu vertreten, mich als ein Experte, aber mit
document.createTextNode()
Griffe allen diesen Fällen, und das zeigt die tags buchstäblich, so dass Sie nicht funktionieren.richtig, aber das Ziel, in meinem Fall ist die sichere html als html gerendert.
InformationsquelleAutor Christophe | 2012-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie sicher sein wollen, Sie werden desinfizieren Sie Ihre Vorlagen sowohl auf dem client und dem server. Nicht schreiben Sie Ihre eigenen anti-XSS library als böswillige Benutzer gebunden sind, wissen, ein exploit, dass Sie noch nicht bilanziert; es gibt einfach zu viele Nuancen und es sei denn, du hast ein XSS-expert, sind Sie verpflichtet, zu verpassen.
Auf der client-Seite, Google Caja hat eine ziemlich gut HTML-Bereinigung Dienstprogramm, robust-Bereinigung auf der HTML-Zeichenfolgen, die Reinigung bösartige Attribute oder andere Bereiche, in denen böse Benutzer können das tun, böse Dinge, wie XSS-Angriffe über die Injektion
script
- tags. Auch Sie Peeling Attribute und alle anderen Arten von XSS-injection-Punkte (object
undapplet
- tags, zum Beispiel), so können Sie sich ziemlich sicher.Während sollten Sie desinfizieren auf dem server zu verhindern, dass böswillige Benutzer einfach deaktivieren Sie javascript oder überschreiben von Caja ' s sanitizer, die Sie verwenden können, Caja zu desinfizieren sowohl die input-und output versuchen, Sie zu fangen, so viel wie Sie können.
InformationsquelleAutor ajm
der einfachste Weg, dies zu tun (re: nicht robust, ein wenig hacky) ist zu schreiben spezifischen regex-Ersatz für die Fälle, die Sie aufgeführt:
den robusteren Weg, dies zu tun wäre, um tatsächlich zu analysieren, die das Potenzial von HTML und entfernen Sie böse-tags /Attribute und die re-Serialisierung von HTML und legen Sie diese dann als
.innerHTML
es gibt keinen anderen sand-boxing oder Sicherheitsmaßnahme gebaut, dass ich mir bewusst bin. hoffe, das hilft -ckSie haben zu halten Sie zu Lesen: (mehr als robust, ich habe buchstäblich als die erste "hacky"), Da gibt es "unendliche Möglichkeiten" gegen diese einfachen Hygiene-Methode, sicherlich können Sie von einem denken? (BTW: der Kommentar, auf den Sie erwähnt sicherlich nicht). Darüber hinaus ist zu Bedenken, "wie sicher" etwas gerecht zu werden, schützen Sie eine persönliche Website mit keine Konsequenzen, wenn ein hack kommen, oder arbeiten Sie für Experian? Nicht alles auf die Spitze getrieben, und nur weil eine Lösung ist naiv und zu einfach ist, bedeutet nicht, es kann nicht sein, praktisch angewendet zu wissen, die Risiken.
Ein Benutzer könnte einfach einen link auf eine ähnlich aussehende URL, die eine schädliche website. Sie nicht haben die Verwendung von script-tags oder Ereignisse, um bösartig zu sein. Wie über iframes? Und es spielt keine Rolle, wie "lahm" die website ist. Wenn ein Benutzer speichern kann, die den string so, dass es injiziert für andere user, das ist XSS.
InformationsquelleAutor ckozl