我想知道如何在express.js中使用JSON Vulnerability Protection。
http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx
问题是我曾经从控制器写入res.send(jsonObj),它会将数据直接发送到客户端。 但我想拦截响应并用某些东西修改它并发送给客户端。然后,客户端可以撤消修改并检索原始数据。
我看到了res.format函数,但它不能满足我的需要。
答案 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是我想要的前缀。 我在路线配置之前添加了它。