首页 > 解决方案 > 如何防止通过nodejs中的eval加载动态代码?

问题描述

有没有办法防止在nodejs代码中使用eval和friends?至少有几个 npm 恶意包使用了它,我没有理由在我当前的项目中使用它。

unsafe-eval CSP 声明存在的事实意味着它应该在 V8 级别是可能的,但据我所知,node 没有公开此功能。(如果我按照自己的方式,禁止 eval 将是默认设置......)我知道存在 no-eval eslint 规则,这是一个好的开始,但我正在寻找包含 node_modules 的运行时保证的东西。

标签: node.jssecurityeval

解决方案


除非您自己编写/更改解释器,否则您无法更改 Node.js 解释代码的方式。如果不需要,您可以使用带有 no-eval 规则的 ESlint 之类的 linter 来确保代码中没有。

eval本身并不邪恶。它确实有一些合法的目的。

只有当您以不安全的方式使用它时,它才是不安全的。

这就像一把烹饪刀。当您正确使用它并将其用于它的用途时,它是安全的。如果你试着用它来拔牙,你可以。但这可能不是一个好主意。

你现在问的就像问你怎么能不让刀锋利,因为它可能会割伤你。

还有其他更重要的事情需要担心。

  1. 您的服务器是否安全且没有配置错误?
  2. 您是否真的安装了正确的软件包,而不是一些名称相似的恶意软件包等着您打错字?
  3. 您在运行之前检查过包装内容npm i吗?
  4. 您是否不小心将敏感信息提交到版本控制?
  5. 您的数据库是否安全?它是否意外配置为面向互联网,而它不应该如此?

仅举几个。就系统的整体安全性而言,您还应该担心成百上千的其他问题。

旁注:对于 0-day 漏洞,您只能祈祷。


推荐阅读