如何防止在nodejs中通过eval动态加载代码?

问题描述 投票:0回答:2

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

unsafe-eval CSP 声明存在的事实意味着它应该可以在 V8 级别上实现,但据我所知,node 并未公开此功能。 (如果我有我的方式,禁止 eval 将是默认...)我知道存在 no-eval eslint 规则,这是一个好的开始,但我正在寻找具有运行时保证的东西,其中也包括 node_modules 。

node.js security eval
2个回答
0
投票

我相信您应该能够使用 --disallow-code- Generation-from-strings 命令行选项或通过 NODE_OPTIONS 设置等效标志来实现您正在寻找的目标(在 V12.16.0 和 V12.16.0 中受支持)稍后)。


-2
投票

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

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

只有以不安全的方式使用它才是不安全的。

就像一把菜刀。当您正确使用它并按照其用途使用它时,它是安全的。如果您尝试用它剔牙,就可以。但这可能不是一个好主意。

你现在问的就像问你如何才能不让刀变得锋利,因为它可能会割伤你。

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

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

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

旁注: 对于0day漏洞,只能祈祷了

© www.soinside.com 2019 - 2024. All rights reserved.