Frage

In meiner Anwendung ich bin so dass Anwender ihre CSS-Stylesheets laden, so dass sie auf Vorlagen angewandt werden. Die CSS ist als interne Stylesheet geschrieben, weil zu dieser Zeit möchte ich nicht die CSS-Stylesheet für andere Benutzer verfügbar zu machen.

Das schafft Raum für Benutzer bösartigen Code in die CSS-Datei aufzunehmen. Ursprünglich war mein Plan, alle ‚<‘ und ‚>‘ zu konvertieren, aber das ist in der CSS-Syntax erforderlich. Ich bin nach einer weißen Liste Lösung, da es nicht möglich sein wird, erschöpfend unerwünschte Zeichen zu beseitigen.

Haben Sie Vorschläge für die Implementierung von Sicherheitsmaßnahmen zu diesem Szenario?

War es hilfreich?

Lösung

Sie sollten auf jeden Fall auch mindestens IE Ausdrücke und FF herauszufiltern -moz-Bindungseigenschaften ... beide verwendet werden können, um (potentionally böswilliges) mit Hilfe von Javascript CSS ausgeführt werden.

Dieser Spickzettel Die naheliegendste XSS Taktik enthält, darunter auch einige CSS diejenigen.

Die sicherste Lösung wahrscheinlich Whitelisting würde, wie Sie vorgeschlagen (wenn es akzeptabel ist, Benutzer zu begrenzen nur die weiße Liste Eigenschaften verwenden).

Andere Tipps

implementiert ich einen Filter, der alle < Zeichen &lt; ersetzt. Der Grund dafür ist, dass CSS braucht nicht den < Charakter; der einzige Charakter, es braucht, ist der >, die für Kind-Selektoren verwendet wird.

Auf diese Weise können Benutzer nicht öffnen Tags bösartigen Code zu schreiben.

Ich bin mehr als glücklich, alle anderen / besseren Lösungen zu berücksichtigen.

Dont erlauben Benutzer, eine CSS-Datei zu laden, eine Schnittstelle machen, die die CSS-Dateien dynamisch auf den vom Benutzer ausgewählten Optionen basierend erzeugen. Die Optionen, die Sie ermöglichen. dann können Sie eine fisical CSS-Datei zu machen, oder Sie können eine dynamische Anwendung CSS machen, die auf dieser Konfiguration, dies zu vermeiden basiert schreibt viele CSS-Dateien auf dem Server ... seine ein anderer Ansatz haben, und Sie brauchen nicht alle posible XSS überprüfen ausnutzen , sein leichter zu definieren, was CSS und die Ablehnung etwas gefährlichen Code als Parsen.

ist erlaubt

Verwenden Sie CDATA und die Flucht der Abschlusssequenz (]]>). Ich bin über Browser-Kompatibilität nicht sicher, though.

Beispiel (nicht getestet):

<?PHP

function strReplaceAll($needle, $replacement, $haystack)
{
    // Check for infinite loop.  (NOT FOOL PROOF!)
    if(strpos($replacement, $needle) === FALSE)
        return;

    $numReplacements = 42;

    while($numReplacements)
    {
        $haystack = str_replace($needle, $replacement, $haystack, &$numReplacements);
    }

    return $haystack;
}

?>

<style type="text/css">
/*
<![CDATA[
*/

<?PHP echo sstrReplaceAll(']]>', '', $userCss); ?>

/*
]]>
*/
</style>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top