2011-03-31 51 views
3

我正在使用AntiXssLibrary 4.0,但它不能转义\ x3c。我的错误是什么?AntiXss库运行不正常

我有配置AntiXss是基于这里http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx默认HttpEncoder和设置的httpRuntimeencoderTypeweb.config

,我也创建AntiXSSEncoderHttpEncoder衍生而来,但代替过时

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”显示AntiX ss库不起作用。我只是想这样的节目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如编码器类型,只发生了。当我评论这个并重建。该单引号'由MVC逃脱。似乎AntiXss已禁用!我错过了什么吗?我想这个工作,因为我想\ x3c也像视频一样逃脱。

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

回答

7

你说得对,既然4.0 ​​.NET已编码的HTMLEncode撇号,和AntiXSS不会的,因为,严格来说,它不是必需的HTML字符串,只为属性字符串。

现在,如果您将AntiXSS作为不再适用的编码器进行交换,并且人们可以无处不在地应用Html编码。

因此,当我推入AntiXSS的下一个版本时,它将始终编码撇号。

+0

太好了。它仍然需要编码,因为url像/?k = sss'; ...可以添加javascript,如果javascript字符串使用k的值。那么现在该怎么做?使用现有的.net 4编码?但如何\ x3c等我想逃避也。根据视频,以前版本的AntiXss已经被编码,但现在没有。如果插入到DOM中,则可以插入脚本标记,如/?k = sss \ x3cscript \ x3e。 – CallMeLaNN 2011-04-01 07:12:41

+1

我现在的建议是在你的编码中更具体 - 在属性中使用属性编码,当它在JavaScript中结束时使用javascript编码等。 – blowdart 2011-04-01 11:23:56

+0

好的。我明白了你的观点,我应该明确地使用'Encoder.JavascriptEncode()'将服务器值转换为javascript变量。就像Html属性一样。但是我认为它可以被双编码,因为'@'Razor和'<%: %>'会自动对它进行html编码。使用@ Html.Raw(Encoder.JavascriptEncode(ViewBag.k))不是一个好习惯。也许AntiXss的使用方式可能有点困惑。解决这个双重编码的最佳做法是什么? – CallMeLaNN 2011-04-02 06:35:10