1

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

\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

4

1 回答 1

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 字符串包含一些字符转义序列并且等于

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

所以,我们想转义这些转义序列(包括简单的东西,如\nor \t)以及 JS 字符串分隔符'"- 通过使用@Encoder.JavaScriptEncode.

于 2013-02-19T18:13:30.590 回答