2017-12-31 142 views
1

Wenn HTML in Google App Engine mit der Absicht hochgeladen wird, in einem iframe bearbeitet zu werden, was ist der beste Weg, um es zu bereinigen (z. B. Entfernen von Skripten und anderen bösartigen HTML)?Wie helfe ich HTML-Blob-Uploads in Python in Google App Engine?

Ich denke an

 reader = blobstore.BlobReader(binfo.key()) 
     value = reader.read() 
     newHtml = lxml.html.clean.Cleaner().clean_html (value) 
     #save newHtml as the blob in google cloud store to be served. 

Ich frage mich, ob es einen besseren Weg, dies und jede Hilfe zu tun, ist sehr geschätzt.

NB: Es wird auch toll sein, wenn es eine Möglichkeit gibt, Anker zu entfernen oder Anker (oder Quellen) nicht-relative und sichere http, etc .. zu machen (oder einfach komplett zu verbieten).

Antwort

1

Dies kann ein herausforderndes Problem sein, das gut gelöst werden kann, da es so viele Möglichkeiten gibt, wie HTML mit schädlichen Inhalten injiziert werden kann. script Elemente sind vielleicht die bekanntesten/häufigsten, aber form, input und img Elemente können auch missbraucht werden. Es gibt auch die Möglichkeit, dass böswillige JS über Event-Handler in fast jedes Element eingebunden werden kann. More information about XSS from OWASP, um loszulegen.

Da Sie Python verwenden, sind hier einige Bibliotheken zum Bereinigen von HTML, die für Sie nützlich sein könnten.

Für das, was es wert ist, Hosting-Benutzer bereitgestellte HTML in einer iframe ist eine Möglichkeit, bösartige Inhalte der Zugriff auf die App, die Sie bewirten zu verhindern (obwohl Sie möglicherweise Schritte unternehmen möchten, um zu verhindern, dass iframe Breakout), aber Sie möchten Ihren Benutzern klar machen, dass der Inhalt dort nicht immer vertrauenswürdig sein kann.

Hoffe, das hilft!

+0

Vielen Dank. Ich benutze lxml.clean und es entfernt viel davon und scheint ein beliebter Desinfektionsmittel zu sein .. Aber ich werde auch die anderen auschecken, die du erwähnt hast. Übrigens, wenn du 'iframe breakout' sagst, was meinst du? Ich denke auch an 'sandbox'ing the iframe - wird das in solchen Fällen generell empfohlen? – user1055761

+0

Ja, [sandboxed iframes] (https://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/) sollte Ihnen die Möglichkeit geben, die Dinge ein wenig mehr zu sperren. Sie können auch die Einstellung ['X-Frame-Optionen'] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) in Erwägung ziehen, falls diese für Ihre Zwecke geeignet sind -Fall. Hier sind einige weitere Informationen: * [Clickjacking Defense Cheat Sheet] (https://www.owasp.org/index.php/Clickjacking_Defense_Cheat_Sheet) * [Aktuelle SO Thread über Frame-Busting] (https: // stackoverflow. com/fragen/958997/frame-buster-buster-buster-code-benötigt) – erichiggins