我需要在服务器端编码一些被注入(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/