Jef*_*rey 5 security module node.js
我正在使用 Node.js 创建 Web 服务。在实现过程中,我使用了许多通过 npm 安装的第三方模块。如果使用的模块中存在恶意 *.js 脚本,则会出现安全问题。例如,恶意代码可能会删除我所有的磁盘文件,或者默默地收集秘密数据。
我对此有几个问题。
如果您能分享构建 Node.js 服务的任何经验,我将非常感激。
谢谢,杰弗里
您没有提出的一个问题是,模块可能会尝试直接连接到您的数据库本身或内部网络上的其他服务。这可以通过设置模块无法轻易找到的密码来防止。
1. 限制磁盘访问
该项目已在去年的 NodeConf 上展示。它试图在您描述的情况下严格限制文件系统访问。
https://github.com/yahoo/fs-lock
“该模块的目标是在您加载第 3 方模块并且需要限制其访问时提供帮助。”
这听起来很像杰弗里在柏拉图的回答中的评论中提出的建议。
(如果您想进一步研究挂钩操作系统调用,这个hookit 项目可能会提出一些想法。虽然在当前形式中它只包装了回调函数,但它可能会提供挂钩什么以及如何挂钩的灵感。下面是一个示例正在使用它。)
2. 分析敏感数据流向
如果您只担心数据窃取(而不是文件系统或数据库访问),那么您可以集中关注:
您应该最关心那些正在传递敏感数据的包。想必您的网络服务上的一些数据无论如何都会向公众展示!
大多数包无法访问应用程序的完整堆栈,只能访问您传递给它们的数据位。如果某个包仅传递少量敏感数据,而从未传递其余数据,则它可能无法对其接收的数据执行任何恶意操作。(例如,如果您将所有用户名传递到一个包进行处理,将所有地址传递到另一个包,那么与将所有用户名、地址和信用卡号传递到同一个包相比,这个问题要小得多!)
识别应用程序中的敏感数据,并记下它们传递到哪些模块中的哪些函数。
3. 执行高效的代码审查
您可能不需要去 Github 来阅读代码。绝大多数软件包在其安装文件夹中提供了所有源代码node_modules。(然而,有一些包提供二进制文件;这些自然更难验证。)
如果您确实想自己检查代码,可能有一些方法可以减少所涉及的工作量:
为了保护您自己的应用程序,您不需要阅读项目中所有包的完整源代码。您只需要查看那些实际调用的函数即可。
您可以通过阅读代码或借助基于文本的调试器或GUI 调试器来跟踪代码。(当然,您应该注意分支,不同的输入可能会导致调用模块的不同部分。)
当您调用不信任的模块时设置断点,以便您可以单步调试被调用的代码并查看它的作用。您可能会得出结论,只使用了模块的一小部分,因此只需要验证该代码。
虽然跟踪流程应该涵盖运行时敏感数据的问题,以检查文件访问或数据库访问,但我们还应该查看所需的每个模块的初始化require代码,以及从那里进行的所有调用(包括 s)。
4、其他措施
锁定每个软件包的版本号可能是明智的做法,package.json这样您就不会意外安装软件包的新版本,直到您决定需要为止。
您可以利用社会因素来建立对包裹的信心。检查作者的尊严。他是谁,他为谁工作?作者及其雇主是否有维护声誉?同样,谁使用他的项目?如果该包非常受欢迎,并且被行业巨头使用,那么其他人很可能已经审查过该代码。
您可能希望访问 github 并通过“监视”存储库来为您正在使用的所有顶级模块启用通知。如果将来报告包中存在任何漏洞,这将通知您。
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |