我认为我有以下代码段:
<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>
这应该像这样输出Html:
<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>
如果我可以使用Html-Encode urlRecommend或者甚至是值ViewContext.RequestContext.HttpContext.Request.Url.ToString(),我也不会感到害羞。
我已启用请求 - 验证,但对于此部分,我们假设我没有启用它。我可以而且应该在这里进行Html编码吗?
编辑1
我想这就是Guffa建议的:
<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>
答案 0 :(得分:1)
该值应该是HTML编码,因为它在HTML代码的属性中,但是这里没有任何区别,因为没有字符需要转义。
您需要做的是对URL中查询字符串中的值进行URL编码。
链接的HTML代码最终应如下所示:
<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>
(注意:我在你的问题的值中保留了重复的http://
,你也应该修复它。)