2011-03-06 8 views
2

J'ai vu dans une vidéo tutoriel que nous devrions utiliser Html.Encode dans nos vues pour empêcher les injections malveillantes. Cependant, lorsque le texte que je suis en train de coder contient le caractère (par exemple Dog's), la sortie dans le navigateur est Dog. J'aurais pensé que chaque personnage potentiellement dangereux serait remappé à un code de sécurité que le navigateur rendrait correctement. Ce n'est pas le cas? Comment puis-je apparaître dans le navigateur, mais de manière sécurisée au format HTML?Comment rendre une citation simple en toute sécurité

Répondre

5

Si vous utilisez ASP.NET MVC 2 <%:%> encode déjà la valeur pour vous Dans Razor (MVC 3) @ code les valeurs pour vous afin que vous n'avez pas besoin d'envelopper la sortie en Html. Encode

Assurez-vous que vous n'êtes pas à double encodage

6

Le Razor @ dans encoder automatiquement pour vous, ce qui signifie que vous avez probablement fait un double codage. Exemple:

@Html.Encode("This is \"safe\"") 

est plus ou moins la même chose que

@{Response.Write(Html.Encode(Html.Encode("This is \"safe\"")));} 

J'sais si ce dernier fonctionne Razor bien.

+0

le dernier travaillerait en rasoir, bien que vous ne devriez pas écrire directement à l'objet 'response'. Si vous faites des choses pourraient être rendues dans un endroit inattendu. – marcind

+0

Quoi? Le code ne s'exécute-t-il pas séquentiellement? – Alxandr

+0

Le code s'exécute de manière séquentielle, mais la sortie du rasoir est écrite dans un tampon de texte qui n'est envoyé au flux de réponse qu'une fois l'exécution d'une page terminée. Si vous écrivez directement dans le flux de réponse, vous pouvez injecter votre sortie avant que le vidage ne se produise, ce qui entraîne une commande inattendue. – marcind

Questions connexes