我正在使用 AntiXssLibrary 4.0 但它没有转义\x3c。我的错误是什么?
我已根据此处 http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx 将 AntiXss 配置为默认 HttpEncoder
并在web.config
中设置httpRuntime
的encoderType
。
我还创建了 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 分钟。
为了确认,我也在一个 Action 中设置了这个:
public ActionResult Index(string k)
{
ViewBag.k = k;
ViewBag.j = Microsoft.Security.Application.Encoder.HtmlEncode(k);
return View();
}
然后在 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"/>-->
最佳答案
你是对的,因为 4.0 .NET 在 HTMLEncode 中编码了撇号,而 AntiXSS 没有,因为严格来说,HTML 字符串不需要它,只需要属性字符串。
现在,一旦您将 AntiXSS 换成编码器,该假设就不再适用,而人们不管愿意与否,都会在任何地方应用 Html 编码。
所以当我推送下一个版本的 AntiXSS 时,它会一直对撇号进行编码。
关于asp.net-mvc-3 - AntiXss 库运行不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5497795/