Est-il possible d'une adresse e-mail valide (quelque chose qui fonctionnerait s'il est utilisé en envoyant à Gmail, pour différentes définitions de validité (l'e-mail serait reçu non l'exploitation)) pour contenir JavaScript pouvant être exploité si rendu et la sortie n'est pas désinfectée. (correctement codé)? Si oui, veuillez fournir un exemple.
Je dirais que théoriquement (et pratiquement, en fonction de votre fonction d'assainissement), oui, la partie locale d'un email peut être utilisée dans des attaques XSS.
Le problème est que les adresses électroniques sont complexes et peuvent inclure un certain nombre de caractères spéciaux. De plus, les adresses électroniques offrent des fonctionnalités telles que des commentaires et des chaînes citées, qui permettent encore plus de caractères spéciaux.
XSS dans une partie locale de l'adresse e-mail
[J'utilise l'information - RFC3696 , car il est beaucoup plus agréable de lire que les RFC officiels.]
La règle exacte est que tout ASCII caractère, y compris les caractères de contrôle, peut apparaître cité ou dans une chaîne citée.
Donc, une adresse électronique valide serait la suivante:
"<script>alert(1)</script>"@example.com
Vous pouvez tester sa validité ici . Ceci n'est évidemment pas sécurisé.
Autres possibilités
Même sans cordes citées, un attaquant peut au moins se rapprocher:
Sans citations, les pièces locales peuvent être constituées de toute combinaison de caractères alphabétiques, de chiffres ou de tous les caractères spéciaux! # $% & '* + -/=? ^ _ `. {| } ~
Ceci est déjà suffisant pour entrer dans un contexte JavaScript, par exemple:
<a href='mailto:USER_EMAIL'>email me</a>
passant par:
foo'onclick='alert'foo='@example.com
Le problème ici est que (
n'est pas autorisé, mais je ne serais pas à l'aise d'imprimer cela à l'endutilisateur non connecté. À tout le moins, un utilisateur pourrait changer le style: foo'style='color:red'title='imImportant'@example.com
.
Vous pouvez également placer la charge utile dans un commentaire de la partie locale, afin que les restrictions possibles de votre fournisseur de messagerie ne s'appliquent pas, par exemple: ("<script>alert</script>")[email protected]
, où [email protected]
est votre adresse email (ici, les mêmes règles que ci-dessus s'appliquent - <
et >
ne peut être que dans des chaînes citées; De plus, vous ne pouvez pas avoir (
et )
, même dans les chaînes citées).
Et c'est à peu près la partie locale. La partie Domaine donne des vecteurs d'attaque supplémentaires attaquants.
Défense appropriée
C'est pourquoi la prévention XSS ne devrait pas être du filtrage, mais un codage approprié. Tous les personnages dangereux (dans la plupart des contextes - mais pas tous - ils sont au moins '
, "
, <
, et >
) doit être codé HTML lors de l'envoi à un utilisateur, quel que soit le filtre appliqué à l'avance.
En outre, Tim's excellente réponse , gmail Implémentez une stratégie de sécurité de contenu Pour empêcher tout script qui parvient à contourner leurs filtres de Rendu in Bavances pris en charge .
Donc, oui, alors qu'une adresse e-mail peut contenir des balises "<script>alert('foo')</script>"@example.com
Je serais surpris si Google ne l'encodge pas correctement et, comme indiqué, ils ont le CSP pour protéger les utilisateurs si elles ne l'étaient pas. Cela dit, il y avait un un bogue récent dans l'application Gmail dans Android qui a laissé des adresses à ressembler à elles étaient spoofées à première vue.