首页 > 解决方案 > 在 Node.js/express 中安全地将对象传递给客户端

问题描述

一个常见的问题是如何将对象从 Node.js/Express.js 传递到浏览器。使用 JSON stringify 可以做到这一点,但如果对象包含用户提供的数据,则可能会为脚本注入和可能的其他攻击打开大门。

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

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

相关链接:

在 node/express + ejs 中将对象传递给客户端?

如何将包含带有引号的字符串的javascript对象从node.js传递给浏览器?

将 NodeJS express 对象传递给 AngularJS 1.6

在 node/express + ejs 中将对象传递给客户端?

标签: javascriptnode.jsexpress

解决方案


使用 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/


推荐阅读