对Html进行编码是否有效?

时间:2012-01-31 09:19:53

标签: asp.net-mvc xss html-encode

我认为我有以下代码段:

<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>

1 个答案:

答案 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://,你也应该修复它。)