使用HttpUtility.HtmlEncode并处理特殊字符/变音符号等

时间:2014-11-04 12:18:02

标签: c# asp.net utf-8 ascii html-encode

我正在使用HttpUtility.HtmlEncode来清理用户输入以防止XSS攻击。我的问题是,HtmlEncode会将ü等特殊字符转换为其Html等效代码。我找不到有关它的功能和编码的文档。然后为了正确地向用户显示这个,我需要HtmlDecode它。

2个问题:

  1. HtmlEncode如何确定它需要编码一个假定有效的字符,如ü而不是其他unicode字符,如标准英文字母字符。 HtmlEncode是否对所有非ascii字符进行编码?什么是防止脚本标记但允许特殊字符如变音符号而不创建特殊忽略列表的最佳方法?

  2. 使用HtmlDecode会导致风险,因为它会转换回潜在的恶意javascript

1 个答案:

答案 0 :(得分:1)

  1. HTMLEncode()做了两件事:
    1. 它处理任何不属于默认127 ASCII字符集的字符。
    2. 它将可能被浏览器误解为有效HTML,CSS或Javascript的字符编码,以防止意外和故意改变网页。
  2. 使用危险吗?一切都可能是危险的,取决于你如何使用它。问题不在于“你在解码吗?”而是“你在解码用户数据吗?”。使用它肯定是危险的,这取决于你对结果的处理方式。即使只是将其显示给客户端也可能导致XSS。
  3. 关于编码和解码的FAR比我在这里写的更多,而且我之前的人已经解释得比我更详尽。 This article on preventing XSS in Asp.Net可以向您解释XSS是什么以及如何防止它。