JavaScriptEncode 看起来不对

标签 javascript security xss antixsslibrary

我需要在服务器端编码一些被注入(inject)到 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\x3a\x22\x2347B937\x22,\x22BoxBackgroundColor\x22\x3a....

什么给了?我使用了错误的编码方法吗?目标是防止跨站点脚本编写,此 JavaScript 在我们网站最近的安全扫描中发出了危险信号。

最佳答案

Microsoft.Security.Application.Encoder.JavaScriptEncode() 仅用于对将在 JavaScript 字符串文字中使用的不受信任的数据进行编码。可选的第二个参数 boolean emmitQuotes 指定是否在输出字符串的两端添加引号(默认值为 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>

关于JavaScriptEncode 看起来不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15439726/

相关文章:

jsonp - 我是否需要清理 JSONP 调用中的回调参数?

javascript - 在 for 循环中打破 Promise 链

javascript - 简单的 javascript 不起作用 - 令人沮丧!

php - 这种ajax登录方法是否安全?

java - RMISecurityManager 与 SecurityManager

security - 在 Wildfly 10 中配置 HTTP header

PHP 验证 base64 编码的图像

javascript - 如何查找特定浏览器版本支持的 CSP 版本?

javascript - ExtJS 改变表单组件 POST 数据格式

javascript - Angular + Requirejs - 以错误的顺序加载