2009-03-04 49 views
5

我在ASP.NET MVC应用程序中有一个textarea,用户可以输入一些文本。当我向用户显示文本时,我使用Html.Encode来防止恶意输入。问题是用户可以输入西班牙语,也许他输入añoEncode将其转换为a&#241o。我如何防止这种情况?为安全编码HTML输入时,如何避免编码国际字符如Ñ或ñ?

编辑:在生成的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

+0

您的抱怨是编码国际字符,还是用户看到编码的字符而不是他们输入的字符?如果是后者,那么“偶然编码两次”的答案是正确的。如果没有,请告诉我们。 – Eddie 2009-03-04 17:29:23

回答

2

所以我的猜测是,这个问题是与Html.RouteLink

没错。你不应该对进入RouteLink的参数进行HTML编码,它会生成HTML本身,所以会照顾你逃跑。

5

你是否意外地编码了两次

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

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

正常情况下,当你在textarea内容中放置转义符时,它应该在解码后的textarea中显示出来(显示为预期的非转义字符)。

所以这可能是一个意外Html.Encode两次不必要的问题。

如果您的数据已经被转义,您可能希望在将其放入textarea之前解除(Html.Decode)。

+0

这里也一样。 +1 – Tomalak 2009-03-04 16:59:48