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

Jed*_*oky 5 html security asp.net-mvc encoding

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

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

<a href="a1-'a1'-Cama&amp;#241;o?sort=estadisticas#241;o">a1 'a1' Cama&amp;#241;o</a>
Run Code Online (Sandbox Code Playgroud)

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

<b>a1 'a1' Cama&#241;o</b>
Run Code Online (Sandbox Code Playgroud)

第一个是这样生成的:

<%= Html.RouteLink(Html.Encode(Model.NAME),  ...... %>
Run Code Online (Sandbox Code Playgroud)

第二个是这样的:

<%= Html.Encode(Model.NAME)%>
Run Code Online (Sandbox Code Playgroud)

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

cha*_*rit 5

你是不是偶然编码了两次

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

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

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

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

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


bob*_*nce 2

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

是的。您不应该对进入 RouteLink 的参数进行 HTML 编码,它会自行生成 HTML,因此会为您处理转义。