为安全性编码HTML输入时,如何避免编码Ñ或ñ等国际字符?

时间:2009-03-04 16:54:01

标签: html asp.net-mvc security encoding

我在ASP.NET MVC应用程序中有一个textarea,用户可以在其中键入一些文本。当我向用户显示文本时,我使用Html.Encode来防止恶意输入。问题是用户可以键入西班牙语,也可以键入añoEncode将其转换为a&#241o。我该如何防止这种情况?

编辑:在生成的HTML中,我看到了:

<a href="a1-'a1'-Cama&amp;#241;o?sort=estadisticas#241;o">a1 'a1' Cama&amp;#241;o</a>

稍后在页面中我有了这个,这次显示是正确的:

<b>a1 'a1' Cama&#241;o</b>

第一种是以这种方式生成的:

<%= Html.RouteLink(Html.Encode(Model.NAME),  ...... %>

和第二个像这样:

<%= Html.Encode(Model.NAME)%>

所以我的猜测是问题出在Html.RouteLink

2 个答案:

答案 0 :(得分:5)

您是否意外编码两次

例如,如果您在服务器端以编程方式设置Textarea的内容,它将在渲染时自动编码内容。

尝试查看textarea的原始HTML输出。

通常当你将转义符放在textarea内容中时,它应该在textarea中显示解码(显示为预期的非转义字符)。

所以这可能是Html.Encode偶然发生两次意外问题。

如果您的数据已被转义,您可能需要在将其放入textarea之前取消转义(Html.Decode)。

答案 1 :(得分:2)

  

所以我的猜测是问题在于Html.RouteLink

是的。您不应该对进入RouteLink的参数进行HTML编码,它会生成HTML本身,因此会为您提供转义。