Attaques XSS et attributs de style

Il y a l'Attribut de Style attaques XSS comme:

<DIV STYLE="width: expression(alert('XSS'));">

Ou

<DIV STYLE="background-image: url(javascript:alert('XSS'))">

Tous les exemples j'ai vu utilisez la fonctionnalité d'expression ou d'url - essentiellement quelque chose comme une fonction qui nécessite "(" et ")".

je pense à suivre la méthode de filtrage des étiquettes de style, je les vérifierais en utilisant la grammaire suivante (approximativement):

identifier: [a-zA-Z_][a-zA-Z0-9-]*
number: [0-9]+
string: '[a-zA-Z_0-9 ]*'
value : identifier | number | string | number + "(em|px)" | number +"%"
entry: identifier ":" value (s value )*
style: (entry ;)*

donc en gros j'autorise les propriétés ASCII avec des valeurs numériques ou très des valeurs de chaîne limitées (essentiellement pour les noms de police) ne permettant pas d'utiliser quoi que ce soit qui ressemble à un appel.

la question Est-ce suffisant? Existe-il des attaques qui peuvent faire quelque chose comme ça:

<DIV STYLE="this-is-js-property: alert 'XSS';">

Et réussir?

Quelqu'un peut-il penser à la vulnérabilité de XSS d'un tel test?

Pour le Rendre clair

j'ai besoin d'attributs de style que de nombreux outils comme TinyMCE les utiliser et de filtrage inoffensif attributs de style off de manière significative du mal à la fonctionnalité.

je préfère donc passer les cas communs en supprimant tout ce qui peut utiliser @import, url, expression, etc. Et assurez-vous également que la syntaxe CSS de base est ok.

Réponse

Non il n'est pas sûr en raison de la vulnérabilité de clic-jacking.

20
demandé sur Artyom 2010-12-28 16:59:59

4 réponses

Cela ne fonctionne pas en raison d' cliquez-jacking vulnérabilité.

Exemple:

<a href="http://example.com/attack.html" style="display: block; z-index: 100000; opacity: 0.5; position: fixed; top: 0px; left: 0; width: 1000000px; height: 100000px; background-color: red;"> </a> 

trouvé à:http://www.bioinformatics.org/phplabware/forum/viewtopic.php?id=164

Le code serait parfaitement validé, mais il peut causer de graves dommages.

Donc la règle d'utilisation de pouce très strict de la liste blanche, ou ne permettent pas les attributs de style.

10
répondu Artyom 2010-12-28 15:24:42

Il y a un fondement là-bas appelé OWASP qui vous aide avec cela.

pour répondre À votre question Are there any attacks....; Oui!

il y a des tonnes de documentation là-bas, et il y a des bibliothèques que vous pouvez utiliser pour échapper correctement à tout le code XSS.

Lire le XSS prévention de la feuille.

2
répondu Shervin Asgari 2010-12-28 14:28:17

règle de sécurité n ° 1: si vous êtes le moins en doute, présumez qu'il y a un trou.

Quels sont vos objectifs? Quelle fonctionnalité causerait CSS d'une source non fiable?

1
répondu aaaaaaaaaaaa 2010-12-28 14:32:26

Oui, vous pouvez utiliser les attaques XSS avec les attributs de Style .

ces styles ont été injectés car nous ne les avions pas déclarés dans nos étiquettes dans une page particulière de jsp mais ils ont été transmis après vérification par notre groupe de sécurité:

<img src="<path here>" style=x:ex/**/pression
(alert(54163)) ".gif"

je pense utiliser un filtre HTTP pour l'arrêter ici, mais je suis toujours à la recherche.

nous n'avons pas non plus protégé nos champs d'entrée cachés et ceci est passé aussi bien:

<input type="hidden" name="<variable name here>" value="<value here>"  style=x:ex/**/pression(alert
(54163)) "">

Avec un outil comme Burpsuite, vous pouvez modifier les requêtes à la volée pour injecter XSS dans des tags comme celui-ci. Cependant, avec L'API ESAPI de OWASP, vous pouvez ajouter une protection. Nous n'utilisions pas les tags JSTL car c'était un ancien code, donc c'était la meilleure solution à court terme.

Pour ce qui est caché entrée que j'ai utilisé;

<input type="hidden" name="id" value="<%=ESAPI.encoder().encodeForHTMLAttribute(id)%>"

vous pouvez aussi utiliser XSS avec la js événement onload dans une balise img:

0
répondu James Drinkard 2014-12-04 15:32:20