Attaques XSS et attributs de style

Il existe des attaques connues de style Attribute XSS comme:

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

Ou

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

Tous les exemples que j'ai vus utilisent l'expression ou la fonctionnalité url – essentiellement quelque chose fonctionne comme cela nécessite "(" et ")".

Je pense à la méthode suivante de filtrage des étiquettes de style, je les vérifions 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, fondamentalement, j'autorise les propriétés ASCII avec des valeurs numériques ou des valeurs de chaînes très limitées (essentiellement pour les noms de police) ne permettant pas d'utiliser quoi que ce soit comme un appel.

La question est-elle assez bonne? Y a-t-il des attaques qui peuvent faire quelque chose comme ça?

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

Et réussissez-vous?

Est-ce que quelqu'un peut penser à la vulnérabilité XSS de ce test?

Pour préciser

J'ai besoin d'attributs de style, car de nombreux outils tels que TinyMCE les utilisent et filtrant des attributs de style inoffensifs offraient beaucoup de mal aux fonctionnalités.

Je préfère passer des cas communs en supprimant toutes les choses qui peuvent utiliser @import, url, expression, etc. Et assurez-vous également que la syntaxe css de base est correcte.

Répondre

Non, il n'est pas sécurisé en raison de la vulnérabilité de cliquage.

Cela ne fonctionne pas en raison de la vulnérabilité de cliquage .

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 cela pourrait causer des dégâts sérieux.

Donc, utilisez une liste blanche très stricte ou n'autorisez pas les attributs de style.

Il existe une base ouverte appelée OWASP qui vous aide.

Pour répondre à votre question Are there any attacks.... ; Oui!

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

Lisez la fiche de prévention XSS .

Règle de sécurité n ° 1: si vous avez le moins de doute, supposons qu'il y ait un trou.

Qu'est-ce que vous essayez d'atteindre? Quelles fonctionnalités causeraient les CSS d'une source non approuvée?

Oui, vous pouvez utiliser des attaques XSS avec des attributs Style.

Ces styles ont été injectés car nous ne les avons pas déclarés dans nos tags dans une page jsp particulière, mais nous avons réussi à être vérifiés par notre groupe de sécurité:

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

Je pense à l'utilisation d'un filtre HTTP pour l'arrêter ici, mais je l'examine encore.

Nous n'avons pas également protégé nos champs de saisie cachés et cela a également été possible:

 <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 les API ESAPI de OWASP, vous pouvez ajouter une protection. Nous n'utilisions pas les balises JSTL car c'était un ancien code hérité, donc c'était la meilleure solution à court terme.

Pour l'entrée cachée que j'ai utilisée;

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

Vous pouvez également utiliser XSS avec l'événement js onload dans une balise img :