我需要在服务器端对注入到html中的一些javascript进行编码。我正在使用Microsoft.Security.Application.Encoder.JavaScriptEncode(),但是从视图源中最终看起来像这样:

'var DesignTheme \ x3d \ x7b \ x22StyleId \ x22 \ x3a \ x2235 \ x22,\ x22BackgroundColor \ x22 \ x3a \ x22 \ x23DDF1FA \ x22,\ x22HeaderColor \ x22 \ x3a \ x22 \ x230B70A6 \ x22,\ x22ButtonColor \ x22 \ x22 \ x2347B937 \ x22,\ x22BoxBackgroundColor \ x22 \ x3a ....

是什么赋予了?我使用了错误的编码方法吗?目的是防止跨站点脚本编写,并且此javascript在我们网站的近期安全扫描中添加了一个红色标记。

最佳答案

Microsoft.Security.Application.Encoder.JavaScriptEncode()仅用于编码将在JavaScript字符串文字中使用的不受信任的数据。可选的第二个参数boolean emitQuotes指定是否在输出字符串的两端添加引号(默认为true)。因此,例如,有两种方法可以在ASP.NET WebForms中使用该方法:

<script>
    <% string nameEnteredByUser = "alert('I am a hacker');"; %>

    var name = <%= Microsoft.Security.Application.Encoder
        .JavaScriptEncode(nameEnteredByUser) %>;
    var nameWithMessage = '<%= Microsoft.Security.Application.Encoder
        .JavaScriptEncode(nameEnteredByUser, false) %>' + ' is a very nice name.';

    console.log(name); //alert('I am a hacker');
    console.log(nameWithMessage); //alert('I am a hacker'); is a very nice name.

</script>

10-07 15:43