2014-11-04 257 views
0

我使用HttpUtility.HtmlEncode来消毒用户输入以防止XSS攻击。我的问题是,HtmlEncode将特殊字符(如ü)转换为它们的Html等效代码。我找不到关于它做什么和不编码的文档。然后为了正确显示这个给用户我需要HtmlDecode它。使用HttpUtility.HtmlEncode和处理特殊字符/变音符号等

2个问题:

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

  2. 是否使用HtmlDecode暴露的危险,因为它被转换回潜在的恶意的JavaScript

+0

“我的问题是,HtmlEncode转换特殊字符”为什么这是一个问题?您的字符串应该显示为HTML源代码(然后HtmlEncode是正确的)或显示为纯文本(然后不使用HtmlEncode) – 2014-11-04 12:26:09

+0

它不会将英文字母编码为其HTML代码.. – user48408 2014-11-04 13:13:27

+0

它不需要。请告诉我们您如何处理字符串以及它如何显示给最终用户。 – 2014-11-04 13:16:42

回答

1
  1. 的HTMLEncode()做两个主要方面:
    1. 它处理的是不是一部分的任何字符默认的127个ASCII字符集。
    2. 它对可能被浏览器误解为有效的HTML,CSS或Javascript的字符进行编码,以防止意外和故意改变网页。
  2. 使用危险吗?根据使用方法的不同,一切都可能会很危险。问题不是“你在解码吗?”而是“你在解码用户数据吗?”。根据你对结果做什么,使用它肯定会很危险。即使只显示给客户端也会导致XSS。

关于编码和解码有更多的关于编码和解码的信息比我在这里可以写得更多,而且之前的人已经对它做了比我更详尽的解释。 This article on preventing XSS in Asp.Net可以解释你的XSS是什么以及如何防止它。

+0

因此,HtmlEncode将处理的字符集是=任何非ASCII字符+任何可能被浏览器错误解释的ASCII字符,如< >等? – user48408 2014-11-04 16:19:34

+0

@ user48408是的,正好。 – Nzall 2014-11-05 08:39:09

+0

假设这是正确的,我会将其标记为答案。如果您有任何文件,请在评论中发帖 – user48408 2014-11-05 09:06:34