Il existe des attaques connues d'attributs de style telles que:
<DIV STYLE="width: expression(alert('XSS'));">
Ou
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
Tous les exemples j'ai déjà vu utiliser la fonctionnalité expression ou url -, fondamentalement, une fonction comme celle-ci nécessitent "(" et ")".
Je pense suivre la méthode de filtrage des balises 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, fondamentalement, j'autorise les propriétés ASCII avec des valeurs numériques ou des valeurs de chaîne très limitées (essentiellement pour les noms de police), ne permettant pas d'utiliser quoi que ce soit qui ressemble à call.
La question est-ce assez bon? Y a-t-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é XSS d'un tel test?
Pour que ce soit clair
J'ai besoin d'attributs de style car de nombreux outils tels que TinyMCE les utilisent et le filtrage des attributs de style inoffensifs Nuirait considérablement à la fonctionnalité.
Je préfère donc passer les cas courants en supprimant tout ce qui peut utiliser @import, url, expression, etc. Et assurez-vous également que la syntaxe CSS de base est correcte.
Réponse
Non, ce n'est pas sûr en raison de la vulnérabilité du clic.
Cela ne fonctionne pas à cause de click-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 pourrait causer de sérieux dommages.
Donc, en règle générale, utilisez une liste blanche très stricte ou n'autorisez pas les attributs de style.
Il existe une fondation ouverte appelée OWASP qui vous aide à cela.
Pour répondre à votre question Are there any attacks....
; Oui!
Il y a des tonnes de documentation et des bibliothèques que vous pouvez utiliser pour échapper correctement à tout code XSS.
Lisez la fiche de prévention XSS .
Règle de sécurité n ° 1: Si vous avez le moins de doute, présumez qu'il y a un trou.
Qu'essayez-vous de réaliser? Quelle fonctionnalité provoquerait CSS à partir d'une source non fiable?
Oui, vous pouvez utiliser les attaques XSS avec des attributs de style.
Ces styles ont été injectés car nous ne les avions pas déclarés dans nos balises dans une page particulière de jsp, mais avons été acceptés lors de l'audit 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 j'examine toujours.
Nous n’avons pas non plus protégé nos champs d’entrée cachés, ce qui est également passé à travers:
<input type="hidden" name="<variable name here>" value="<value here>" style=x:ex/**/pression(alert
(54163)) "">
Avec un outil tel que Burpsuite, vous pouvez modifier à la volée des demandes d’injection de XSS dans des balises comme celle-ci. Cependant, avec les API ESAPI d'OWASP, vous pouvez ajouter une protection. Nous n'utilisions pas les balises JSTL car il s'agissait d'un ancien code hérité, ce qui en faisait la meilleure solution à court terme.
Pour l'entrée cachée j'ai utilisé;
<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 :