2015-10-20 73 views
1

我想知道如何在express.js中使用JSON漏洞保护。使用express JS的JSON漏洞防护

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

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

我看到了res.format函数,但它没有按照我的需要工作。

回答

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是我想要的前缀。 我在我的路线配置之前添加了它。

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告诉人们这些日子实施这种保护。如果有人在评论中启发我,我将不胜感激! :)