2011-01-06 15 views
3

Ich habe ein Mitglied Seitensystem aktualisiert und eine der Anforderungen ist es, fett, unterstrichen, kursiv, Schriftfarbe und Links auf bestimmte Felder , aber nicht Schriftgröße oder Stil - all dies mit einem WYSIWYG-Editor. Dies wurde ursprünglich mit einem Textarea und einigen minimalen HTML-Filtern gemacht, dh Entfernen von <script> mit einem preg_replace(). Verrückt und definitiv unsicher, ich weiß.Benutzern erlauben, BBCode oder HTML mit WYSIWYG zu posten?

Meine erste Überarbeitung war, TinyMCE zu verwenden und bestimmte Tags innerhalb TinyMCE zu verbieten, das einzige Problem ist, dass ich nicht auf TinyMCE als irgendeine Art von Validator verlassen kann und sichern HTML-Eingabe gegen XSS, die ich entdeckt habe, ist ein absolutes Minenfeld. Ich habe die letzte Stunde oder so auf bestimmte Praktiken zu lesen, und es scheint fast unmöglich, bestimmte HTML-Tags/Attribute zu erlauben, ohne die aktuellen Profile zu vermasseln und weitere Anpassungen wie die Schriftgröße zu erlauben und Sachen mit Inline-Stilen. Zum Beispiel muss ich Schriftfarben mit span-Tags erlauben, aber das style-Attribut erlaubt auch jedes CSS-Element.

Ich habe jetzt mit der Idee der Verwendung von BBCode mit einem WYSIWYG-Editor, da dies uns htmlspecialchars() sicher auf die Ausgabe anwenden und dann vollständig Kontrolle über alle HTML mit einem BBCode-Parser für [b] erzeugt werden könnte gesprenkelt , [u], [i] und [color] Tags mit nl2br() für Zeilenumbrüche.

Das einzige Problem ist, ich muss etwas codieren, um das aktuelle HTML-Setup in BBCode zu konvertieren.

Meine Hauptabfrage ist die oben genannten Schritte mit BBCode genug, um vor XSS-Angriffen zu schützen? Oder gibt es eine elegantere/offensichtlichere Methode der HTML-Sicherheit, die ich verwenden kann?

Antwort

4

Sie die HTML Purifier Bibliothek nutzen könnten. Es ist Schwergewicht, erlaubt aber Regeln wie "nur Farbeinstellungen in Style-Tags zulassen". Es ist gründlich getestet und aktiv entwickelt.

+0

Dies ist relevant für meine Interessen, gibt es ein Beispiel dafür, wie man das macht? – Dunhamzzz

1

Speichern in HTML, und verwenden Sie die richtige HTML-Parser (wie DOMDocument) Befreien Sie sich von gefährlichen Tags zu erhalten (wie htmlspecialchars die gefährlichen Tags anwenden, anstatt blind zu Inhalt Knoten)

+0

Dies ist, was ich zuerst getan habe, aber eine Anforderung ist, dass Benutzer die Schriftfarbe ändern können, aber nicht die Möglichkeit haben, irgendetwas in ein Stilattribut zu stellen. Ich habe das gerade in der Frage klarer gemacht :) – Dunhamzzz

+0

Ist immer noch möglich zu verwenden [DOMAttr] (http://php.net/manual/en/class.domattr.php) – ajreal

+0

+1 Allerdings besser ist es, inklusive - - nicht exklusiv. –

Verwandte Themen