在Node.js / express中将对象安全地传递给客户端

时间:2018-08-17 02:59:36

标签: javascript node.js express

一个常见的问题是如何将对象从Node.js / Express.js传递到浏览器。可以使用JSON字符串化来执行此操作,但是如果对象包含用户提供的数据,则可以打开脚本注入和其他攻击途径。

此链接中提到的使用Base64的方法是否有缺点?

https://stackoverflow.com/a/37920555/645715

相关链接:

Passing an object to client in node/express + ejs?

How to pass a javascript object that contains strings with quotes from node.js to the browser?

Pass a NodeJS express object to AngularJS 1.6

Passing an object to client in node/express + ejs?

1 个答案:

答案 0 :(得分:2)

使用Base64编码确实解决了传递注入攻击的紧迫问题,但并不一定解决可能存在的注入攻击浮出水面的问题。例如,此小提琴表明它确实防止了紧急问题:https://jsfiddle.net/9prhkx74/

var test2 = JSON.parse(window.atob('PC9zY3JpcHQ+PHNjcmlwdD5hbGVydCgndGVzdDInKTwvc2NyaXB0PjxzY3JpcHQ+'));

这不会显示警告框,只会引发有关无效JSON的错误。但是,如果将其更改为文字字符串,它将显示警报框(容易注入)

var test2 = JSON.parse("</script><script>alert('test2')</script><script>")

现在,如果您立即将其解析为JSON对象,它将被炸毁,一切都会变得“安全”。但是,如果由于要将其传递给其他值而将其分配给某个值,则仍然存在潜在的问题。

建议不要先将创可贴放置在注入本身上,而建议先对其进行修复并适当地转义数据,然后再将其传递回客户端或在服务器端进行处理。

有很多库可以帮助您完成此任务

https://www.npmjs.com/package/sanitize https://www.npmjs.com/package/express-sanitizer

这是一篇非常不错的文章,强调了为什么重要的是进行清理,而不仅仅是修补潜在的恶意数据:https://lockmedown.com/5-steps-handling-untrusted-node-js-data/