【问题标题】:When encoding HTML input for security, how do I avoid encoding international characters like Ñ or ñ?为安全起见对 HTML 输入进行编码时,如何避免对 Ñ 或 ñ 等国际字符进行编码?
【发布时间】:2009-03-04 16:54:00
【问题描述】:

我在 ASP.NET MVC 应用程序中有一个文本区域,用户可以在其中键入一些文本。当我向用户显示文本时,我使用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>

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

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

第一个是这样生成的:

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

第二个是这样的:

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

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

【问题讨论】:

  • 您是否抱怨它正在编码国际字符,或者用户看到的是编码字符而不是他们输入的字符?如果是后者,那么“意外编码两次”的答案是正确的。如果没有,请告诉我们。

标签: html asp.net-mvc security encoding


【解决方案1】:

您是否意外编码两次

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-24
      • 2020-05-28
      • 1970-01-01
      • 2018-07-15
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多