我需要在服务器端对注入到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>