Html.Encode devrait être appelé lors de la construction ActionLinks dans ASP.NET MVC
-
21-09-2019 - |
Question
Si le nom d'un lien est tiré de la base de données, si vous appellerez la méthode Html.Encode pour nettoyer le nom?
Par exemple:
Html.ActionLink(Model.PersonFromDB.FirstName,
"Action",
"Controller",
new RouteValueDictionary { { "id", Model.PersonFromDB.Id } },
null)
ou
Html.ActionLink(Html.Encode(Model.PersonFromDB.FirstName),
"Action",
"Controller",
new RouteValueDictionary { { "id", Model.PersonFromDB.Id } },
null)
Il serait logique que vous voulez faire pour assurer qu'il n'y a pas de chaînes dangereuses injectées dans la page entre les balises de <a>
et </a>
, mais sont des scripts et des exécutables tels entre les balises d'ancrage?
La solution
Non, puisque selon ce fil sur HtmlAction.Link()
SO déjà HTML code des valeurs, de sorte que vous finiriez le faire deux fois.
Autres conseils
Il est certainement une bonne idée, mais vous devriez probablement empêcher les utilisateurs d'entrer dans les chaînes potentiellement malveillants comme premier nom.
Oui, tout à fait. En règle générale, pour tout HTML que vous allez à la sortie qui a été initialement obtenu à partir d'une source non fiable, en supposant le format n'a pas été HTML déjà (et suffisamment Info brute), vous devez toujours HTML encoder la chaîne pour protéger contre les attaques par injection.