Désinfectez HTML avant de le ranger dans le DB ou avant de rendre? (Bibliothèque AntiXSS dans ASP.NET)

StackOverflow https://stackoverflow.com/questions/2060923

Question

J'ai un éditeur qui permet aux utilisateurs d'ajouter HTML qui est stocké dans la base de données et rendu sur une page Web. Puisque c'est entrée non fiable, je prévois d'utiliser Microsoft.Security.Application.AntiXsSS.GetSafeHtmlFragment pour aseptiser le code HTML.

  • Dois-je santiize avant d'enregistrer la base de données ou avant de rendre l'entrée dans la page Web non sécurisé?
  • Y at-il un avantage à inclure le code source AntiXSS dans mon projet au lieu de simplement la DLL? (Je pourrais peut-être personnaliser la liste blanche?)
  • Quel fichier de classe que je devrais regarder dans la mise en œuvre effective du GetSafeHtmlFragment
Était-ce utile?

La solution

Je suis en désaccord avec la réponse choisie pour deux raisons

  1. Si vous avez enregistré des données codées, vous devez choisir un encodeur avant de stocker. Que se passe si vous avez enregistré quelque chose comme HTML mais veulent aussi pousser dans un autre format, par exemple en réponse JSON, ou dans le cadre d'un document XML? Vous avez maintenant un format codé HTML, vous devez décoder, puis encodez dans le format correct.
  2. Et si on découvre un bogue dans les encodeurs et pousser une nouvelle version sur? Maintenant, parce que vous n'êtes pas coder au point de sortie toutes vos anciennes données peuvent contenir des choses qui ont été incorrectement codées. Vous pouvez encoder à nouveau, mais vous frapper à double problèmes de codage qui peut être douloureux pour filtrer correctement.

En général, vous encodez au point de la production et de traiter toutes les données provenant d'un magasin de données non sécurisé par défaut - après tout, si quelqu'un parvient à modifier votre base de données directement ou par injection SQL

Autres conseils

Avoir un écouter la podcast OWASP 67 avec Jeff Williams sur XSS . Il parle de ne pas désinfectante ou encodage avant le stockage. La principale raison est que si (quand) les bibliothèques évoluent en réponse à de nouvelles vulnérabilités vos données va être recollé dans l'ancienne version. Bien sûr, cela ne vous empêche pas de courir une entrée contre un whitelist au point d'entrée et de rejeter quoi que ce soit hors de la plage acceptable.

  • Les deux
  • Seulement si vous prévoyez de le changer, que je ne ferais pas personnellement
  • La classe AntiXSS (car il est appelé comme AntiXss.GetSafeHtmlFragment())

Vous pouvez utiliser la directive dans la page du paramètre ValidateRequest = "true" . De cette façon, toutes les données de demande est validée et s'il y a un problème de validation, vous pouvez toujours attraper l'erreur. Il empêche également des fils d'injection sql et d'autres non seulement XSS possible.

Avec des données numériques, vous pouvez valider le débordement d'entier ou une mauvaise utilisation des types de données avec Int32.TryParse () ou tout autre de la famille TryParse (Byte.TryParse Int16.TryParse ...)

Pas besoin d'utiliser toute autre méthode de désinfectant pour les mains ou classe supplémentaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top