2012-01-31 5 views
1

Je l'extrait de code suivant à mon avis:Est-il valide pour Html-Encode une URL

<div id="recommendFooter"> 
    <% string urlRecommend = Url.Action("RecommendProduct", "Products", new { url = ViewContext.RequestContext.HttpContext.Request.Url.ToString() }); %> 
    <div> 
     <a href="<%= urlRecommend %>">This product is awesome!</a> 
    </div> 
</div> 

Cela devrait sortie Html comme ceci:

<div id="recommendFooter"> 
    <div> 
     <a href="http://www.mysite.com/Products/RecommendProduct?url=http://www.mysite.com/products/productbykey/20" >This product is awesome!</a> 
    </div> 
</div> 

Je ne suis pas shure si je peux Html -Encode urlRecommend ou même la valeur ViewContext.RequestContext.HttpContext.Request.Url.ToString().

J'ai Request - Validation activé, mais pour cette partie, supposons que je ne l'ai pas activé. Peut et devrais-je coder Html ici?

EDIT 1

Je suppose que c'est ce que Guffa suggère:

<div id="recommendFooter"> 
     <% string urlRecommend = Url.Action("RecommendProduct", "Products", new { url = Server.UrlEncode(ViewContext.RequestContext.HttpContext.Request.Url.ToString())}); 
string urlRecommendXssSave = Server.HtmlEncode(urlRecommend); 

%> 
     <div> 
      <a href="<%= urlRecommendXssSave %>">This product is awesome!</a> 
     </div> 
    </div> 

Répondre

1

La valeur doit être HTML codé comme il est dans un attribut dans le code HTML, mais cela ne fait pas différence ici car il n'y a pas de caractères qui ont besoin d'échapper.

Ce que vous devez faire est de coder l'URL de la valeur dans la chaîne de requête dans l'URL.

Le code HTML pour le lien devrait se terminer comme ceci:

<a href="http://www.mysite.com/Products/RecommendProduct?url=http%3a%2f%2fhttp%3a%2f%2fwww.mysite.com%2fproducts%2fproductbykey%2f20">This product is awesome!</a> 

(Note: Je gardai le double http:// de la valeur de votre question, vous devriez probablement corriger cela aussi.)

Vous
+0

écrit que je n'ai pas besoin de HTML-Encode car il n'y a pas de caractères qui ont besoin d'échapper. Supposons qu'il y ait ces caractères: est-ce que j'utiliserais le logik dans mon édition? –

+0

@MalcolmFrexner: Oui, ce serait correct. Vous pouvez également utiliser la balise '<%: %>' pour coder la chaîne en HTML. – Guffa