Je suis d'économie soumis par l'utilisateur HTML (dans une base de données). Je dois prévenir les attaques par injection de code Javascript. Le plus pernicieux que j'ai vu, c'est le script dans un style="expression(...)".
En plus de cela, une bonne quantité de l'utilisateur valide le contenu inclura des caractères spéciaux et des constructions XML, donc je voudrais l'éviter en blanc de la liste si possible. (Une liste de tous les admissibles éléments et d'attributs HTML).
Exemples de Javascript attaque les cordes sont:
1)
"Bonjour, j'ai un <script>alert("le mal!")</script> problème avec le <chien> élément..."
2)
"Salut, c' <b style="width:expression(alert('mauvais!'))">chien</b> est noir."
Est-il un moyen de prévenir de tels Javascript, et de laisser le reste intact?
La seule solution que j'ai pour l'instant est d'utiliser une expression régulière pour supprimer certains modèles. Il résout le cas 1, mais pas le cas 2.
Edit: Désolé, j'ai oublié de mentionner l'environnement - c'est essentiellement la MS de la pile:
- SQL Server 2005
- C# 3.5 (ASP.NET)
- Javascript (évidemment) et jQuery.
Je voudrais que le goulet d'étranglement à l'ASP.NET couche - n'importe qui peut fabriquer une mauvaise requête HTTP.
Edit 2:
Merci pour les liens tout le monde. En supposant que je peux définir ma liste (il contenu comprendra beaucoup de mathématiques et de constructions de programmation, donc une liste blanche va être très ennuyeux) j'ai encore une question ici:
Ce type d'analyseur me permettra seulement de supprimer les "mauvais" pièces? La mauvaise partie pourrait être un élément entier, mais alors que penser de ces scripts qui se trouvent dans les attributs. Je ne peux pas supprimer < a hrefs > bon gré mal gré.