2015-03-19 144 views
0

我需要在應用程序MVC視圖中添加一些Xss保護,這些視圖目前正在使用Json.Net和Javascript Widgets。 ViewModels非常大且複雜,所以我不能使用Microsoft AntiXss庫來javascriptEncode屬性,所以我需要在視圖中執行此操作。Json.Net Wrapper防止Xss攻擊

dataBindings: new 
       { 
       inputs = new 
        { 
         widgetType = "textbox", 
         value = new JRaw("myPropertyName") 
        } 
       } 

Javascript小部件控件當前以JRaw對象的形式使用json數據。我想創建一個圍繞JRaw對象的包裝器,無論是以子類還是實用工具方法的形式向javascript編碼字符串屬性,然後再發送給控件進行綁定。

public static JRaw JRawEncode(JRaw rawObj) 
    { 

     if (rawObj != null && rawObj.Value.GetType() == typeof (String)) 
     { 
       //Microsoft.Security.Application.Encoder.JavaScriptEncode(rawValue); 

     } 

     return rawObj; 
    } 

這是可能做的JRaw對象或我的方式?有沒有另一種方式與Json.NET做到這一點?我對這裏的Json.Net和Xss編碼是新手,所以請溫和。

回答

0

好吧,讓我們試着溫柔:)你在視圖中的評論代碼應該工作。我不知道它爲什麼被評論。

//Microsoft.Security.Application.Encoder.JavaScriptEncode(rawValue); 

JavaScriptEncode方法將字符串作爲第一個參數。 https://wpl.codeplex.com/SourceControl/latest#trunk/Microsoft.Security.Application.Encoder/Encoder.cs

在你的代碼中,你還在檢查JRaw對象是否是一種String類型。我不知道JRaw.ToString方法會有多大幫助,因爲它會返回JValue實例。

只要你傳遞一個字符串,並期望它是JavaScript編碼的,那麼Microsoft.Security.Application.Encoder.JavaScriptEncode就可以爲你工作。