当前位置:编程学习 > C#/ASP.NET >>

MVC4 Ajax.JavaScriptStringEncode怎么使用?

在Wrox.Professional.ASP.NET.MVC.4.Oct.2012这本书里第3章里提到在javascript里处理用户输入的字符串时要使用Ajax.JavaScriptStringEncode以防止XSS攻击,并给了一个例子:如果用户名是“\x3cscript\x3e%20alert(\x27pwnd\x27)%20\x3c/script\x3e”在使用下面的javascript时就有XSS危险
<script type="text/javascript">
$(function () {
var message = 'Hello @ViewBag.Username';
$("#message").html(message).show('slow');
});
</script>
应该使用下面的javascript:
<script type="text/javascript">
$(function () {
var message = 'Hello @Ajax.JavaScriptStringEncode(ViewBag.Username)';
$("#message").html(message).show('slow');
});
</script>
但是我试验了一下,结果直接报异常,然后我把上面的用户名里的2个%20换成空格,就执行了javascript,弹出了pwnd,我发现原本直接使用ViewBag.Username会进行的HTML编码,使用了Ajax.JavaScriptStringEncode后就不会进行html编码了,而是把<,>尖括号编码成了unicode了。查了msdn Ajax.JavaScriptStringEncode会把字符串转成Json。查了网上一些资料也是说在Javascript里使用用户输入的字符串时要使用Ajax.JavaScriptStringEncode。真不知道是什么原因,请有知道的朋友解答,谢谢! mvc4 --------------------编程问答-------------------- 我也测试了下。发现一个如果你的\x3cscript\x3e%20alert(\x27pwnd\x27)%20\x3c/script\x3e是从客户端提交的话,Ajax.JavaScriptStringEncode编码后(\\x3cscript\\x3e alert(\\x27pwnd\\x27) \\x3c/script\\x3e)不会执行。但是如果此段代码是你从后台赋值的话,使用Ajax.JavaScriptStringEncode编码后(n<script> alert('pwnd') </script>)是可以执行的。 --------------------编程问答-------------------- 除
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,