2014-12-19 162 views
0

我在服務器端編碼了JSON(使用ESAPI編碼器)。客戶端然後檢索bean的字段並進行進一步處理。使用ESAPI編碼器編碼JSON

在服務器端

JSONBean bean=new JSONBean(); 
//populate the bean 
Gson gson=new Gson(); 
String jsonString = gson.toJson(bean); 
String JSEscapedStr=ESAPI.encoder().encodeForJavaScript(jsonString); 
response.setContentType("application/json"); 
response.setCharacterEncoding("UTF-8"); 
response.getWriter().write(JSEscapedStr); 

編碼的JSON字符串

\ x7B \ x22name \ X22 \ X3A \ x22Sameer \ X22 \ x22company \ X22 \ X3A \ x22Company \ X22 \ x22designation \ X22 \ X3A \ x22Developer \ X22 \ x7D

在客戶端

var JSONObj=JSON.parse(data); 
    var name=JSONObj["name"]; 
    var company=JSONObj["company"]; 
    var designation=JSONObj["designation"]; 
    //process these variable in javascript 

我也使用response.se嘗試tContentType( 「普通/文本」);在服務器端也沒有工作。

錯誤

語法錯誤:JSON.parse:位於第1行的JSON數據的第1列時內容類型是「普通/文本」

如果我硬代碼JSON字符串然後它工作

意外的字符
  var jsonEncoded="\x7B\x22name\x22\x3A\x22Sameer\x22,\x22company\x22\x3A\x22Company\x22,\x22designation\x22\x3A\x22Developer\x22\x7D"; 
      var JSONObj=JSON.parse(jsonEncoded); 
      console.log(JSONObj); 
      var name=JSONObj["name"]; 
      var company=JSONObj["company"]; 
      var designation=JSONObj["designation"]; 
      console.log(name); 
      console.log(company); 
      console.log(designation); 
+0

獲取代理工具,如Firefox的TamperData擴展或獲取OWASP的ZAP工具的副本,並捕獲服務器的響應並將其添加到此處。 – avgvstvs 2014-12-19 13:55:34

+0

如果您回答了您自己的問題,請發佈答案,或者請提供所需的信息。 – avgvstvs 2015-01-05 18:30:38

回答

0
  1. 您應該只編碼有效載荷(這應該已經完成​​北GSON本身)而不是整個JSON樹。
  2. ESAPI.encoder().encodeForJavaScript設計用於編碼JavaScript-Methods/Functions的參數或函數參數。
+0

然而encodeForJavaScript產生像\ x2F這樣的轉義字符,驗證器不喜歡,我也認爲它在JSON字符串中不合法,它應該是\ u002F(就像在Java中一樣)。這使得encodeForJavaScript對我無法使用。我們如何解決這個問題? – marc82ch 2017-10-25 10:57:52