【问题标题】:Safely pass object to client in Node.js/express在 Node.js/express 中安全地将对象传递给客户端
【发布时间】:2019-01-24 01:10:18
【问题描述】:

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

此链接中提到的使用 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?

【问题讨论】:

  • 为什么不在发送或存储用户提供的数据之前对其进行清理?
  • 好问题。我的问题是对 JSON 字符串进行 Base64 编码是否足以算作清理。

标签: javascript node.js express


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多