node.js - 如何防止通过nodejs中的eval加载动态代码?
问题描述
有没有办法防止在nodejs代码中使用eval和friends?至少有几个 npm 恶意包使用了它,我没有理由在我当前的项目中使用它。
unsafe-eval CSP 声明存在的事实意味着它应该在 V8 级别是可能的,但据我所知,node 没有公开此功能。(如果我按照自己的方式,禁止 eval 将是默认设置......)我知道存在 no-eval eslint 规则,这是一个好的开始,但我正在寻找包含 node_modules 的运行时保证的东西。
解决方案
除非您自己编写/更改解释器,否则您无法更改 Node.js 解释代码的方式。如果不需要,您可以使用带有 no-eval 规则的 ESlint 之类的 linter 来确保代码中没有。
eval
本身并不邪恶。它确实有一些合法的目的。
只有当您以不安全的方式使用它时,它才是不安全的。
这就像一把烹饪刀。当您正确使用它并将其用于它的用途时,它是安全的。如果你试着用它来拔牙,你可以。但这可能不是一个好主意。
你现在问的就像问你怎么能不让刀锋利,因为它可能会割伤你。
还有其他更重要的事情需要担心。
- 您的服务器是否安全且没有配置错误?
- 您是否真的安装了正确的软件包,而不是一些名称相似的恶意软件包等着您打错字?
- 您在运行之前检查过包装内容
npm i
吗? - 您是否不小心将敏感信息提交到版本控制?
- 您的数据库是否安全?它是否意外配置为面向互联网,而它不应该如此?
仅举几个。就系统的整体安全性而言,您还应该担心成百上千的其他问题。
旁注:对于 0-day 漏洞,您只能祈祷。
推荐阅读
- postgresql - 如何强制使用具有唯一值 postgresql 的唯一列
- python - python中的线程,没有错误,但程序似乎不起作用
- python-3.x - 自动修复扫描数据中的卡住像素
- java - 在 Windows 上规范化路径时,Java 是否需要支持 ERROR_NO_MORE_FILES?
- list - Flutter:StringBuilder 中的排序列表
- excel - 下标超出范围的问题(错误 9)
- php - 根据WordPress中带有计数器的帖子数量添加图像大小
- express - 将正文大于 64k 的 POST 发送到 Express.js 无法处理
- javascript - 使用 readline 读取两个字符串
- sql - 最适合这种情况的数据库建模是什么?