【问题标题】:How to safely parse json object coming through websockets?如何安全地解析来自 websockets 的 json 对象?
【发布时间】:2016-11-28 21:19:36
【问题描述】:

我的 node.js 服务器期望从未经身份验证(不受信任)的客户端接收字符串化 JSON 对象。

服务器使用 JSON.parse 来处理数据。 是否可以在来自 websocket 的 JOSN 数据中注入“威胁和操纵”命令?

是否需要考虑任何安全预防措施?

javascript解析中是否有“htmlspecialchars() in 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));

【问题讨论】:

    标签: javascript json node.js security parsing


    【解决方案1】:

    这里有几个建议:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的回答。
      猜你喜欢
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2017-05-18
      • 1970-01-01
      • 2012-09-28
      • 2017-09-24
      相关资源
      最近更新 更多