javascript - 在 Node.js/express 中安全地将对象传递给客户端
问题描述
一个常见的问题是如何将对象从 Node.js/Express.js 传递到浏览器。使用 JSON stringify 可以做到这一点,但如果对象包含用户提供的数据,则可能会为脚本注入和可能的其他攻击打开大门。
此链接中提到的使用 Base64 的方法有缺点吗?
https://stackoverflow.com/a/37920555/645715
相关链接:
在 node/express + ejs 中将对象传递给客户端?
如何将包含带有引号的字符串的javascript对象从node.js传递给浏览器?
解决方案
使用 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/
推荐阅读
- r - R/Shiny DT 数据表搜索突出显示在 IE 上不起作用
- python - Python Hash MD5 不等于 SQL Server
- java - 在自定义 Eclipse 透视图中显示视图
- html - Github index.html 和 MVC
- laravel - 在 Laravel 中节流
- java - OffsetDateTime 到 ZonedDateTime - 具有特定的 ZoneId
- powershell - Powershell 将数据从 Oracle 适配器传输到批量复制适配器
- python - 按特定字符拆分一列中的值
- java - 如何在 Java 应用程序 (JSP) 中集成 node.js 应用程序 (bpmn-js)
- html - 如何在 CSS 中指定文本装饰下划线的宽度