You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

MrSecure

Unregistered

1

Tuesday, August 23rd 2011, 7:36pm

Sicherheit bei WYSIWYG-Editor

Fühlt euch gegrüßt von mir! ;)

Ich habe da mal eine etwas komische Frage. Ich würde gern in meiner Website einen WYSIWYG-Editor verwenden. Das ist ansich ja nicht so das Problem. Also habe ich mir mal den ckEditor geladen und eingebunden. Funktion echt super.

Meine Frage und mein Problem ist nun folgendes: Wenn jemand JavaScript abschaltet, kann er problemlos <script>alert('test');</script> in die Textarea schreiben und das wird nach dem Speichern auch ausgeführt auf der Seite. Wenn ich die Ausgabe aber mit htmlspecialchars() behandele, bekommt der Benutzer den vollen Quellcode vorn Kopp gehauen.

Wie genau kann ich diese Sicherheitslücke (XSS) beheben oder habe ich etwas übersehen? Oder ist das vielleicht noch niemandem aufgefallen?

Danke erstmal!
MrSecure

2

Tuesday, August 23rd 2011, 8:59pm

Hi.
die Sicherheitslücke liegt nicht am Texteditor, sondern an deiner Ausgabe.
"All Input Data is Evil"... Wenn du dem Benutzer kein HTML erlauben willst, dann nutze htmlspecialchars.
Wenn du ihm nur bestimmte html Elemente erlauben möchtest, dann nutze strip_tags vor dem Speichern.

MrSecure

Unregistered

3

Tuesday, August 23rd 2011, 9:30pm

Guten Abend und danke für die Antwort!

Wenn ich doch den ckEditor beispielsweise nutzen möchte, wie soll ich den dann sicher machen? Jeder kann JavaScript deaktivieren und dadurch nutzen was er will. Da muss es doch irgendwas geben. Wie funktioniert das denn hier in diesem Forum? Könnte ich hier problemlos wenn ich JavaScript deaktiviere ein Alert auswerfen?

Ein WYSIWYG-Editor speichert mir ja reinen HTML-Code. Wenn jemand ein Wort fett markiert, habe ich in meiner Datenbank stehen: <strong>Test</strong>
Das soll er auch problemlos wiedergeben. Nur halt kein JavaScript oder IFrame etc. was halt Schaden anrichten kann.

MrSecure bedankt sich!

4

Tuesday, August 23rd 2011, 10:29pm

Es ist egal ob ckEditor oder reines Textfeld.

Übergeben wir in beiden Fällen das gleiche, mit dem ckEditor hast du nur einfach eine HTML-Ansicht und kannst alles einfach bearbeiten.

Wenn du zum Beispiel im Editor nen Text fett machst bekommst du am Ende sowas wie:

HTML Code

1
<b>test</b>


Im normalen Textfeld hast du natürlich nichts so komfortables uns müsstest das selber in HTML reinschreiben.

Also übergeben wir immer das selbe egal ob Editor oder reines Textfeld.
Der ckEditor ist eigentlich trotzdem ein ganz normales Textfeld nur eben durch JS "aufgepeppt".

Um dich vor sowas zu schützen musst du wie Torben schon sagte htmlspecialchars() oder strip_tags() nutzen.

MfG
Exi

5

Wednesday, August 24th 2011, 10:46am

Ich verstehe gar nich was du hast mit deinem Javascript ausmachen?
Dadurch kommt auch keine XSS zustande?

Zudem sollten doch die normale Editore kein JS zulassen?

6

Wednesday, August 24th 2011, 12:38pm

Also ich nutze den Tinymce (http://www.tinymce.com/) in dem habe ich Javascript blockiert,
in dem du ihm sagst welche Elemente er nicht zulassen soll, diese werden dann erst garnicht in die DB eingetragen.

Du bindest den Editor ein und schreibst oben im Headbereich zusätzlich z.B.

JavaScript Code

1
invalid_elements : "<script>"


oder <iframe> je nach dem was du alles nicht willst ;)

7

Wednesday, August 24th 2011, 12:57pm

Vor einer serverseitigen Überprüfung der Daten kannst du auch mit einem WYSIWYG-Editor dich nicht drücken.

8

Wednesday, August 24th 2011, 1:10pm

Das sehe ich aber auch so ...
Ich hab es nicht verstanden was du meinst da ich noch nie auf die Idee gekommen bin "sensibele" Daten mit JS zu filtern.

Das ganze muss Serverseitig ablaufen.

MrSecure

Unregistered

9

Wednesday, August 24th 2011, 1:31pm

Hallo,

danke euch für die Antworten.

Wenn ich das mit den invalideElements mache, bringt mich das doch auch kein Stück weiter. Sobald ich JavaScript mal deaktiviere, habe ich das reine Textfeld vor der Nase. Da kann ich dann problemlos eintippen was ich will, z.B. das Cookie auslesen und auf eine URL-weiterleiten, mit der ich die sensiblen Daten herausfischen kann.

Ich sehe das als eine riesige Sicherheitslücke. Man muss doch irgendwie sicherstellen, dass er nur bestimmte Tags zulässt oder anstatt von HTML nur BB-Codes in die Datenbank schreibt, die ich dann wiederum mit Suchen/Ersetzen entsprechend darstellen kann.

10

Wednesday, August 24th 2011, 2:09pm

Wo ist dein Problem?
Wenn du JS deaktivierst hast du auch keinen WISIWYG-Editor?

Du musst das zB mit PHP machen und bestimmte Elemente sperren wie <script> etc pp.
Nix JS, die Lösung lautet PHP.

Und da kannst du auch dein JS deaktivieren, neu installieren, verkaufen und sonst was - PHP checkt es!

MrSecure

Unregistered

11

Wednesday, August 24th 2011, 3:07pm

Da muss ich ja Millionen Sachen prüfen.

Oder hat mal jemand freundlicherweise einen Codeschnipsel? Eine Whitelist wäre am besten oder?

Weil wenn ich <script> sperre, kann er auch genausogut <img src="javascript:... nutzen oder bei einem onerror etwas ausführen.

Danke euch!

12

Wednesday, August 24th 2011, 6:56pm

Hier wurden bereits zweimal die Funktionen htmlspecialchars() und strip_tags() angesprochen. Letztere ermöglicht es dir, bestimmte HTML-Tags per Whitelist zuzulassen.
Ich würde dir allerdings am ehesten die Bibliothek HTML Purifier empfehlen. Diese wandelt nämlich den oftmals wirren Code des WYSIWYG-Editors in valides HTML um und filtert u. a. mithilfe einer Whitelist unerwünschte Tags heraus.

13

Wednesday, August 24th 2011, 7:40pm

Wurde nicht schon an mehren Stellen htmlspecialchars erwähnt? Und strip_tags? http://php.net/htmlspecialchars & http://php.net/strip_tags ... User Eingaben vor der Ausgabe durch eine der beiden Funktionen jagen ... Oder so ^^

MrSecure

Unregistered

14

Wednesday, August 24th 2011, 9:45pm

Wie kriege ich denn eine Whitelist mit strip_tags() hin?

Weil wenn ich ja htmlspecialchars() verwendet, habe ich den ganzen Quellcode doch vor der Nase. Da bringt mir auch der beste WYSIWYG-Editor nichts.

15

Wednesday, August 24th 2011, 10:08pm

Ich glaube wir können alle nicht ganz nachvollziehen was du a.) vorhast und was b.) dein Problem ist ...

Wenn es um WYSIWYG Editoren geht, nehme doch einen der BBCode nutzt bzw. nutze BBCode ... Sprich du speicherst die User Eingaben und jagst die bei der Ausgabe durch htmlspecialchars und einem BBCode Parser und zack hast du dein (vermutetes) Ziel erreicht ...

Verständlich?

MrSecure

Unregistered

16

Wednesday, August 24th 2011, 10:20pm

:D schwierige Geburt.

So habe ich es ja momentan und möchte meinen Benutzern mehr Komfort anbieten.

Also habe ich einen WYSIWYG-Editor eingebaut. Wenn ich nun etwas speichere, z.B. test, so steht in der Datenbank nun auch <strong>test</strong> drin. Wenn ich das wiedergebe mit htmlspecialchars(), so sieht der Benutzer NICHT test sondern <strong>test</strong>. Wofür soll hier htmlspecialchars() gut sein?

17

Wednesday, August 24th 2011, 10:31pm

Es ist nicht verkehrt mit BBcode zu arbeiten so, dass du alles umwandlungsfähige umwandelst und alles andere vor dem Schreiben in die Datenbank löschst und beim auslesen einfach die Befehle wieder zurück in html umwandelst.

Generell ist es ja so, dass man nicht x beliebige Formatierungsmöglichkeiten benötigt (also nicht alle HTML Befehle zulässt), sondern nur eine Hand voll.


PHP selber bietet eine BBCode Integration an. Wenn diese nicht verfügbar sein sollte, was meist der Fall ist, dann kannst du einfach bei der Suchmaschine deiner Wahl nach einer gleichwertigen Klasse suchen.

Das hab ich auf die Schnelle gefunden: http://www.christian-seiler.de/projekte/…code/index.html

18

Thursday, August 25th 2011, 5:45am

Du kannst doch auch einfach eine Checkbox per Javascript ausgeben, die aktiviert werden muss,
wenn kein Javascript aktiviert ist, erscheint keine Checkbox, also wird der Eintrag in die DB auch nicht ausgeführt,
somit zwingst du den Nutzer Javascript zu aktivieren und kannst mit dem invalid Element die Elemente verbieten die du willst.

19

Thursday, August 25th 2011, 10:11am

Du kannst doch auch einfach eine Checkbox per Javascript ausgeben, die aktiviert werden muss,
wenn kein Javascript aktiviert ist, erscheint keine Checkbox, also wird der Eintrag in die DB auch nicht ausgeführt

Auch das ist keine ernstzunehmende Sicherheitsmaßnahme. Du kannst immerhin noch nicht einmal feststellen, ob der potentielle Angreifer brav das entsprechende Formular in seinem Browser ausgefüllt hat oder der Request anderweitig ausgelöst wurde.

MrSecure

Unregistered

20

Thursday, August 25th 2011, 1:43pm

Ach wisst ihr was, ich bleibe einfach bei meinen alten BB-Codes :D

Ist mir doch alles zu viel Arbeit. 8)

Danke euch dennoch für die liebe Hilfe!

MrSecure

Similar threads

Social bookmarks