Question

Dans mon application, j'autorise les utilisateurs à télécharger leurs feuilles de style CSS afin de pouvoir les appliquer aux modèles. Le css est écrit comme une feuille de style interne, car pour le moment je ne voudrais pas exposer la feuille de style css à d’autres utilisateurs.

Cela crée un espace pour que les utilisateurs puissent inclure du code malveillant dans le fichier css. Au départ, mon plan était de convertir tous les '& Lt;' et '>', mais cela est nécessaire dans la syntaxe CSS. Je suis en quête d’une solution de liste blanche, car il ne sera pas possible d’éliminer de manière exhaustive les caractères indésirables.

Avez-vous des suggestions pour appliquer des mesures de sécurité à ce scénario?

Était-ce utile?

La solution

Vous devriez également filtrer au moins les expressions IE et les propriétés FF -moz-binding ... vous pouvez les utiliser pour exécuter du javascript (potentiellement malveillant) en utilisant css.

Cette aide-mémoire contient les tactiques XSS les plus évidentes, y compris des stratégies CSS.

La solution la plus sûre consisterait probablement en une liste blanche, comme vous l'avez suggéré (s'il est acceptable de limiter les utilisateurs à n'utiliser que des propriétés inscrites sur une liste blanche).

Autres conseils

J'ai mis en place un filtre qui remplace tous les < caractères par &lt;. La raison en est que CSS n'a pas besoin du caractère >; le seul caractère dont il a besoin est le <=> qui est utilisé pour les sélecteurs enfants.

De cette façon, les utilisateurs ne peuvent pas ouvrir les tags pour écrire du code malveillant.

Je suis plus qu’heureux d’envisager d’autres / meilleures solutions.

Ne permettez pas aux utilisateurs de télécharger un fichier CSS, créez une interface qui génère les fichiers CSS de manière dynamique en fonction des options sélectionnées par l'utilisateur. Les options que vous autorisez. alors vous pouvez créer un fichier CSS physique ou une application dynamique qui écrit CSS en fonction de cette configuration, ceci évite d'avoir beaucoup de fichiers CSS sur le serveur ... c'est une autre approche et vous n'avez pas besoin de vérifier chaque exploit XSS possible , il est plus facile de définir ce qui est autorisé que d’analyser CSS et de rejeter un code dangereux.

Utilisez CDATA pour échapper à la séquence finale (]]>). Je ne suis toutefois pas sûr de la compatibilité du navigateur.

Exemple (non testé):

<?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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top