如何安全地解析来自websockets的json对象?

时间:2016-07-25 13:39:37

标签: javascript json node.js security parsing

我的node.js服务器期望从未经过身份验证的(不受信任的)客户端接收字符串化的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));

2 个答案:

答案 0 :(得分:0)

JSON.parse本身被认为可以保护其用户免受eval等旧方式的恶意攻击 - 使用JSON将其字符串值转换为对象。但是,它仍然很重要,它无法保护程序的作者免受处理接收对象的代码中的意外安全问题。但是,从这个意义上说,从JSON对象反序列化与“普通”代码创建的对象没有什么不同。此外,由于不时会发现问题,因此没有JavaScript解释器具有绝对的安全性,因此存在某些人在V8的JSON.parse实现中发现安全问题的风险。话虽如此,定制的自编解析算法不太可能比部署到数百万次安装的经过验证的开源算法更安全。

答案 1 :(得分:0)

以下是一些建议:

  1. 限制服务器读取的数据量以防止DoS攻击(通过内存不足错误)。
  2. 限制请求数量,限制输入以防止DoS(通过处理太多错误/格式错误的请求)。
  3. 使用严格的JSON验证程序来防止格式错误的数据。 is-my-json-valid基于JSONSchema提供强大的验证。 https://github.com/mafintosh/is-my-json-valid