使用express JS的JSON漏洞保护

时间:2015-10-20 06:23:45

标签: json node.js security express

我想知道如何在express.js中使用JSON Vulnerability Protection。

http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

问题是我曾经从控制器写入res.send(jsonObj),它会将数据直接发送到客户端。 但我想拦截响应并用某些东西修改它并发送给客户端。然后,客户端可以撤消修改并检索原始数据。

我看到了res.format函数,但它不能满足我的需要。

2 个答案:

答案 0 :(得分:3)

我使用res.json代替res.send来发送JSON,所以我修改了你的答案中的代码:

  app.use(function (req, res, next) {
    res.json = function (data) {
      var strData = typeof data == 'object' ? JSON.stringify(data) : data;
      strData = expressOptions.jsonPrefix + strData;
      res.set('Content-Type', 'text/json');
      res.send.call(res, strData);
    };
    next();
  });

虽然我已经实现了“只是为了确定”,但我认为这不是一个严重的漏洞。如果您阅读了从this链接的this(我认为您有灵感来编写Express中间件),那么“现代”浏览器中似乎不存在JSON漏洞,就像在IE 6和FireFox 3中一样。

所以我不确定为什么AngularJS告诉人们这些天来实施这种保护。如果有人在评论中启发我,我将不胜感激! :)

答案 1 :(得分:2)

最后我最终这样做了:

    app.use(function (req, res, next){
        var actualSend = res.send;
        res.send = function (data) {
            if (typeof data == "object") {
                var strData = expressOptions.jsonPrefix + JSON.stringify(data);
                res.set('Content-Type', 'text/json');
                actualSend.call (res, strData);
            } else {
                actualSend.call (res, data);
            }
        };
        next();
    });

其中expressOptions.jsonPrefix是我想要的前缀。 我在路线配置之前添加了它。