2013-03-15 101 views
2

我需要在服务器端编码一些JavaScript注入到html中。我正在使用Microsoft.Security.Application.Encoder.JavaScriptEncode(),但它最终从视图源中看起来像这样: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在我们网站的最近安全扫描上抛出红旗。

回答

4

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> 
0

也许你正在寻找System.Web.HttpUtility中的一个编码?