MvcHtmlString.ToHtmlString() pas de codage HTML?
Liées à cette question j'ai jouer avec XSS dans mon ASP.NET projet MVC et Im confondre avec le MvcHtmlSTring.ToHtmlString() la méthode. À partir de la la documentation "Renvoie une codé en HTML chaîne de caractères qui représente l'objet courant.", mais il ne marche pas dans mon cas:
var mvcHtmlString = MvcHtmlString.Create("<SCRIPT/XSS SRC=\"htpp://ha.ckers.org/css.js\">").ToHtmlString();
var encoded = HttpUtility.HtmlEncode("<SCRIPT/XSS SRC=\"htpp://ha.ckers.org/css.js\">");
Sortie de mvcHtmlString
<SCRIPT/XSS SRC="htpp://ha.ckers.org/css.js">
De sortie codé <-- c'est le comportement que je soupçonne!
<SCRIPT/XSS SRC="htpp://ha.ckers.org/css.js">
Ai-je raté quelque chose?
OriginalL'auteur Robert Muehsig | 2012-03-21
Vous devez vous connecter pour publier un commentaire.
MvcHtmlString (ou HtmlString, ou quoi que ce soit qui implémente IHtmlString) est pour les chaînes qui doivent être émis sous forme de HTML verbatim - c'est à dire en faisant un MvcHtmlString vous dites que vous voulez vraiment ces balises HTML.
La différence, c'est quand vous émettez la chaîne dans un ASP.NET page à l'aide de
<%: .. %>
(nouveau dans la ASP.NET 4 ou une version ultérieure). Dans ce cas, le ASP.NET le moteur sera automatiquement HtmlEncode régulière des chaînes pour vous (ou tout ce qui n'est pas de mettre en œuvre IHtmlString) alors que le MvcHtmlString seront émis dans la page verbatim /clair.c'est à dire je pense que la documentation est faux. Il y a un connectez billet avec l'équivalent d'erreur dans le HtmlString constructeur de la documentation, qu'ils n'ont fix. (J'ai pensé que j'ai déposé :-/peut-être la mienne est fermé comme un double de quelqu'un d'autre?) Je n'ai pas remarqué les MvcHtmlString de la documentation a été mal.
C'est la méthode sur le IHtmlString de l'interface. Il signifie vraiment "retour du contenu HTML à insérer dans la page" - c'est ce que ASP.NET MVC 4 appel et émettent les résultats, sans autre encodage. Je suppose que c'est si vous pouvez faire quelque chose de différent dans les autres classes, mais vous avez raison il n'y a pas de différence ici.
OriginalL'auteur Rup
La documentation MSDN est correct, mais peut-être un peu déroutant. Le
MvcHtmlString
etIHtmlString
interface sont utilisés pour représenter une chaîne qui a déjà été HTML de codage. MSDN dit:L'objet que vous avez transmis à la
MvcHtmlString
objet était déjà codée en HTML, de sorte que les deux.ToString()
et.ToHtmlString()
simplement retourner l'objet que vous avez passé en.Veuillez noter que le MSDN docs faire clairement état:
Pourquoi tout cela? Deux raisons:
IHtmlString
est écrit que les données brutes. Le point de vue des moteurs de supposer que la personne qui crée leIHtmlString
a déjà désinfecté les données.IHtmlString
a son propre stringify méthode afin qu'elle ne doit pas avoir la même mise en œuvre queToString()
. Alors queToHtmlString()
doit retourner le code HTML, vous pouvez facilement imaginer queToString()
pourrait revenir quelques développeurs-amicale des informations de débogage.OriginalL'auteur Eilon