2009-10-07 7 views
4

Je suis nouveau à php et j'essaie de comprendre hors de ceci est une mauvaise idée ou un risque de sécurité.Est-ce une mauvaise idée de laisser les utilisateurs ajouter leur propre feuille de style?

J'ai un tableau de données que je fournis à un utilisateur, il a une feuille de style par défaut qu'il charge, mais si l'utilisateur veut inclure le leur, je l'ai fait afin qu'il puisse simplement pointer vers sa feuille de style :

http://www.mysite.com/info.php?css=http://www.someothersite.com/mystylesheet.css 

J'ai essayé d'ajouter des balises de style de fermeture et javascript dans le fichier css, mais le DOM semble charger tout comme CSS qu'il ne soit pas en mesure de traiter.

Je n'ai jamais vu d'autre site permettant cette méthode d'ajout de feuilles de style, est-ce une bonne idée ou une mauvaise idée? Je pensais que je pourrais avoir le script charger le fichier et chercher les mots clés utilisés dans javascript, mais avec mes tests, je ne suis pas sûr que je dois le faire.


Mise à jour: J'ajoute le CSS comme suit:

<link href="<?php echo (isset($_GET['css'])) ? $_GET['css'] : 'default.css'; ?>" rel="stylesheet" type="text/css" /> 
+1

Gardez à l'esprit que les utilisateurs de Firefox et les utilisateurs d'Opera ont déjà un support intégré du navigateur pour créer des feuilles de style spécifiques au site. – Brian

+0

Votre méthode d'ajout de CSS conduit à un trou de sécurité énorme: supposons que $ _GET ['css'] est ">

0

Cela dépend de la façon dont il est utilisé. S'il est possible pour un utilisateur de voir votre site à l'aide de la feuille de style de quelqu'un d'autre, vous vous induisez en erreur.

+0

Non, l'utilisateur utilise lui-même cette information dans un iframe, donc je ne pense pas qu'il existe un risque de ce genre. – Mottie

2

Il semble que XSS et probablement le détournement de clic peut être fait par CSS. Vous devez certainement faire attention à ce que l'URL CSS ne puisse pas être définie avec une attaque CSRF.

Si votre serveur demande de charger le fichier CSS d'origine, alors vous devez vous préoccuper de cette connexion sortante (ou peut-être locale). Si le client le fait, vous voudrez peut-être vous inquiéter de la fuite d'informations dans l'URL (heureusement, les sessions par réécriture d'URL ne sont plus populaires).

+0

Désolé, comme je l'ai dit, je suis assez nouveau pour php. Quel genre de risque cela at-il? Perturber potentiellement l'information et/ou effacer mon serveur? – Mottie

+0

Pour le serveur effectuant la requête? Dans ce cas, l'URL CSS peut pointer vers un serveur web interne, un fichier local, un périphérique, etc. –

3

Oui.

C'est une mauvaise idée. Ce que d'autres ont dit est exactement correct mais un point supplémentaire très important est que si N'IMPORTE QUOI l'utilisateur mettant à jour le css EVER visualise son css alors cet utilisateur peut exécuter n'importe quel javascript dans le contexte de l'utilisateur visualisant sa page.Le pire des cas ici étant l'utilisateur met à jour sa propre page avec xss malveillant, vous affichez leur page (connecté en tant qu'administrateur), l'utilisateur vole votre mot de passe et se connecte comme vous et prend le contrôle du site. Selon les autres problèmes de sécurité que vous avez sur votre site, les scripts inter-sites stockés comme ceux-ci pourraient conduire à un ver xss comme le ver myspace samy.

Voici un lien décent au sujet des variations sur XSS à base de CSS, http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/

+0

Wow c'est effrayant, mais je pense que je suis ok car la page avec le CSS personnalisé est affichée à l'intérieur d'un iframe sur le site des utilisateurs seulement. Et si j'avais prévu de voir leur page, je ne serais pas connecté en tant qu'administrateur (c'est un site différent de toute façon) et j'accède uniquement à mon site via FTP. – Mottie

+1

Cela sonne mieux! Tant que "le site propre des utilisateurs" signifie une page que l'utilisateur lui-même peut voir et que personne d'autre ne peut voir. Parce qu'un autre vecteur d'attaque pourrait être l'utilisateur crée son propre site, ajoute un css mal, puis envoie un lien vers cette page à tous les autres utilisateurs sur le site, tout utilisateur qui est connecté auront leurs informations de cookie prises. Je ne comprends pas complètement la construction du site, donc le scénario ci-dessus pourrait ne pas s'appliquer. – Collin

+0

@fudgey: Vous devriez également * ne jamais rendre votre CSS, peu importe qui vous êtes connecté. Pas même à des fins de débogage, aussi tentant que cela puisse être. Eh bien, à moins que vous soyez connecté à partir d'une configuration de laboratoire de sécurité, mais dans ce cas, vous en savez déjà plus que moi. :) –

Questions connexes