使用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函数,但它不能满足我的需要。

我使用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(); }); 

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

所以我不确定为什么AngularJS现在告诉人们要实施这个保护措施。 如果有人在评论中启发我,我将不胜感激! 🙂

最后我最终这样做了:

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