有什么办法可以防止在nodejs代码中使用eval和friends吗?它已被至少几个 npm 恶意包使用,我没有理由在我当前的项目中使用它。
unsafe-eval CSP 声明存在的事实意味着它应该可以在 V8 级别上实现,但据我所知,node 并未公开此功能。 (如果我有我的方式,禁止 eval 将是默认...)我知道存在 no-eval eslint 规则,这是一个好的开始,但我正在寻找具有运行时保证的东西,其中也包括 node_modules 。
我相信您应该能够使用 --disallow-code- Generation-from-strings 命令行选项或通过 NODE_OPTIONS 设置等效标志来实现您正在寻找的目标(在 V12.16.0 和 V12.16.0 中受支持)稍后)。
除非您自己编写/更改解释器,否则您无法更改 Node.js 解释代码的方式。如果不需要,您可以使用像 ESlint 这样的 linter 和 no-eval 规则来确保代码中没有 linter。
eval
本身并不是邪恶的。它确实有一些合法的目的。
只有以不安全的方式使用它才是不安全的。
就像一把菜刀。当您正确使用它并按照其用途使用它时,它是安全的。如果您尝试用它剔牙,就可以。但这可能不是一个好主意。
你现在问的就像问你如何才能不让刀变得锋利,因为它可能会割伤你。
还有其他更重要的事情需要担心。
npm i
?仅举几例。就系统的整体安全性而言,您应该担心数百甚至数千个其他问题。
旁注: 对于0day漏洞,只能祈祷了