Javascript自动解码编码的字符串?

时间:2013-02-19 15:55:02

标签: javascript jquery asp.net-mvc

我一直在阅读一篇博文,我看到了一些说JS编码漏洞的内容。在下面的示例代码中,如果用户输入以下内容:

\x3cscript\x3e%20alert(\x27pwnd\x27)%20\x3c/script\x3e,它说JS会将它呈现为HTML,这对我来说很奇怪。我试过了,他是对的。

@{
    ViewBag.Title = "Home Page";
}

<h2 id="welcome-message">Welcome to our website</h2>

@if(!string.IsNullOrWhiteSpace(ViewBag.UserName)) {
<script type="text/javascript">
    $(function () {
        //ViewBag.Username value comes from Controller.
        var message = 'Welcome, @ViewBag.UserName!';
        $("#welcome-message").html(message).hide().show('slow');
    });
</script>
}

我的问题是,为什么Javascript会自动解码已编码的字符串?或者它与jQuery的html()函数有什么关系呢? OP说使用Ajax.EncodeJavascriptString()方法来解决这个问题。但为什么我需要编码已编码的字符串?我检查了jQuery的网站,并没有提到类似html()方法的内容。

如果您想查看整篇博文,请访问此地址http://weblogs.asp.net/jgalloway/archive/2011/04/28/preventing-javascript-encoding-xss-attacks-in-asp-net-mvc.aspx

1 个答案:

答案 0 :(得分:3)

查看HTML结果:

<script type="text/javascript">
    $(function () {
        var message = 'Welcome, \x3cscript\x3e alert(\x27pwnd\x27) \x3c/script\x3e!';
        $("#welcome-message").html(message).hide().show('slow');
    });
</script>

然而,JS字符串包含一些character escape sequences并且等于

'Welcome, <script> alert("pwnd") </script>!'

因此,我们希望通过使用转义这些转义序列(包括\n\t之类的简单事物)以及JS字符串分隔符'" @Encoder.JavaScriptEncode