Wie man Whitelist-basierte CSS-Filterung in PHP durchführt

9

Ich arbeite an einer Site und möchte, dass ein Benutzer ein benutzerdefiniertes CSS eingeben kann, das öffentlich angezeigt wird.

Da jedoch eine ganze Reihe von XSS-Angriffen über CSS durchgeführt werden können, möchte ich in der Lage sein, eine Möglichkeit zu finden, die CSS-Ausgabe zu "säubern", ähnlich wie HTML Purifier funktioniert, indem es das CSS analysiert, das geparste CSS gegen eine Whitelist ausführt und dann ein neues Stylesheet basierend auf dem geparsten und auf der weißen Liste befindlichen CSS ausgibt.

Gibt es da draußen schon eine solche Bibliothek? Wenn nicht, gibt es eine CSS-Parsing-Bibliothek, die zum Erstellen einer benutzerdefinierten Implementierung verwendet werden kann?

    
MiffTheFox 01.09.2009, 19:44
quelle

1 Antwort

4

Ich schätze, dass Sie Ihren eigenen CSS-Parser und Filter schreiben werden, also würde ich Folgendes in Betracht ziehen, obwohl ich noch nie so etwas getan habe:

  • Erstellen Sie eine (weiße) Liste zulässiger CSS-Eigenschaften, die Ihre Benutzer verwenden können. Wie: color , font-family .
  • Ich glaube, es wäre besser, Shorthand-Formulare wie background nicht zuzulassen, zumindest am Anfang, damit Sie die Werte leicht analysieren können. Erfordert, dass sie explizit background-color , background-image .
  • schreiben
  • Wenn Sie URLs möchten, lassen Sie nur relative URLs zu und verwerfen Sie alles, was nicht einmal wie eine URL aussieht. Protokollieren Sie diese Probleme trotzdem, damit Sie Ihren Parser und Validator verbessern können.
  • Seien Sie sehr strikt in Ihrer Analyse, verwerfen Sie alles, was Ihr Parser nicht versteht, selbst wenn es gültiges CSS wäre. Mit anderen Worten, erstellen Sie Ihre eigene CSS-Teilmenge.

Beim Parsen wäre der schwierigste Teil das Parsen von komplexen CSS-Selektoren . Aber Sie können auch hier Ihre eigene Teilmenge erzwingen.

Hier ist ein (Pseudo-) Code, vielleicht hilft es Ihnen irgendwie:

%Vor%     
Ionuț G. Stan 02.09.2009, 07:52
quelle

Tags und Links