Microsoft AntiXSS - 是否需要解码?

时间:2010-09-23 01:21:50

标签: c# asp.net html-encode antixsslibrary

HttpUtility类提供编码和解码。但是,当我使用MS AntiXSS 3.1库时,我有一组仅用于编码的方法,这是否意味着可以避免解码?

例如

在应用AntiXSS之前:

lblName.Text = "ABC" + "<script> alert('Inject'); </script";

应用AntiXSS之后:

lblName.Text = AntiXSS.HTMLEncode("ABC" + "<script> alert('Inject'); </script");

因此,在应用编码后,HTML标记会显示在我的Label控件中。

这是预期的结果吗?

3 个答案:

答案 0 :(得分:3)

这取决于您输入的来源,以及您想要使用它做什么。很多时候框架在你看到之前为你解码 - Request.Form,Request.QueryString等。

如果您正在从其他地方读取编码字符串,例如数据库,那么您可能需要对其进行解码,否则您将看到双重编码,例如;

I 3> AntiXSS encoded once becomes

I 3&gt; AntiXSS which then becomes after double encoding

I 3&amp;gt; AntiXSS

可能会产生意想不到的副作用,具体取决于消耗输出的内容。解码直到字符串不再变化的行为是规范化的一个例子。

答案 1 :(得分:3)

是的,我认为这是理想的输出。这是因为脚本未执行。如果脚本已执行,则会显示警报而不是脚本标记。所以这是安全的代码。

答案 2 :(得分:3)

您可以使用HttpUtility.HtmlDecode方法解码AntiXss编码文本(或任何编码文本)。不需要显式的AntiXss解码。