2016-07-25 93 views
0

我的node.js服務器期望從未經過身份驗證的(不可信的)客戶端接收字符串化的JSON對象。如何安全地解析通過websockets傳來的json對象?

服務器使用JSON.parse來處理數據。 是否有可能在來自websocket的JOSN數據中注入「威脅和操縱」命令?

是否有任何安全預防措施要考慮?

有沒有像在JavaScript解析中的「htmlspecialchars()在PHP中」?

服務器:

wsBoss = new WSServer(portboss); 
wsBoss.on('connection', function (socket) { 
console.log('connected to boss'); 
socket.on('message', function (msg) { 
    console.log(JSON.parse(msg).topGeo[0]); 
    var msgsms="HI"; 
    socket.send(msgsms); 
}); 

客戶:

var data={"topGeo":topGeo, 
      "bottomGeo":bottomGeo, 
      "concLoad":concLoad} 
console.log(topGeo,bottomGeo,depth,generalLoad,concLoad,intervLoad,mode,joistType,units); 
websocket.send(JSON.stringify(data)); 

回答

0

這裏有幾點建議:(通過out of memory錯誤),您的服務器讀取,以防止DoS攻擊的數據

  1. 限額。
  2. 限制請求的數量,節制輸入以防止DoS(通過處理太多不正確/畸形的請求)。
  3. 使用嚴格的JSON驗證器來防止格式錯誤的數據。 is-my-json-valid提供基於JSONSchema的健壯驗證。 https://github.com/mafintosh/is-my-json-valid
0

JSON.parse本身被認爲是保護的老辦法的惡意攻擊它的用戶喜歡eval -ling的JSON爲它的字符串值轉換成一個東西。但是,它仍然無法保護程序作者免受處理接收對象的代碼中的意外安全問題。但是,從JSON對象反序列化的意義上說,與「正常」代碼創建的對象沒有什麼不同。此外,由於不時發現問題,所以沒有JavaScript解釋器具有絕對安全性,因此在V8的實現中有人會發現安全問題。話雖如此,定製的自編解析算法不太可能比經過驗證的開源解決方案安全地部署到數百萬次安裝。

+0

感謝您的回答。 –