3

我正在使用 AntiXssLibrary 4.0,但它没有转义 \x3c。我的错误是什么?

HttpEncoder我已根据此处http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx将 AntiXss 配置为默认值并设置在. encoderType_httpRuntimeweb.config

我也创建AntiXSSEncoder派生自HttpEncoder但不推荐使用

output.Write(AntiXss.HtmlEncode(value));

我用它来覆盖HtmlEncode方法:

output.Write(Encoder.HtmlEncode(value));

目前,如果我浏览这个:

http://localhost:28453/?k=sss\x3cscript\x3ealert%28\x27haaha\x27%29;\x3c/script\x3e

警报“haaha”显示 AntiXss 库不工作。我只想制作这样的节目http://channel9.msdn.com/Events/MIX/MIX10/FT05见第 13 分钟。

为了确认我还在一个动作中设置了这个:

    public ActionResult Index(string k)
    {
        ViewBag.k = k;
        ViewBag.j = Microsoft.Security.Application.Encoder.HtmlEncode(k);
        return View();
    }

然后在视图中我放了这个:

<script type="text/javascript">
    $(document).ready(function () {
        var a = '@ViewBag.k';
        var b = '@ViewBag.j';
    $('.resultName:first').html(b);
});
</script>

从浏览器看,a 和 b 的值相同,说明 AntiXss 不能正常工作!

<script type="text/javascript">
    $(document).ready(function () {
        var a = 'sss\x3cscript\x3ealert(\x27haaha\x27);\x3c/script\x3e';
        var b = 'sss\x3cscript\x3ealert(\x27haaha\x27);\x3c/script\x3e';
        $('.resultName:first').html(b);
    });
</script>

更新AntiXssEncoder:仅在我使用as 编码器类型时才发生。当我对此发表评论并重建时。单引号 ' 被 MVC 转义。似乎已禁用 AntiXss!我错过了什么吗?我想要这个工作,因为我想像 \x3c 也像视频一样逃脱。

<!--<httpRuntime encoderType="AntiXSSEncoder, MVCWeb"/>-->
4

1 回答 1

7

你是对的,因为 4.0 .NET 已经在 HTMLEncode 中编码了撇号,而 AntiXSS 没有,因为严格来说,HTML 字符串没有必要,只有属性字符串才需要。

现在,一旦您将 AntiXSS 换成编码器,该假设不再适用,人们会不由自主地在任何地方应用 Html 编码。

所以当我推送下一个版本的 AntiXSS 时,它会一直编码撇号。

于 2011-04-01T04:52:39.310 回答