我正在使用Node.js创建Web服务。在实现中,我使用了许多通过npm安装的第三方模块。如果使用的模块中存在恶意的* .js脚本,则存在安全问题。例如,恶意代码可能删除我的所有磁盘文件,或以静默方式收集 secret 数据。
我对此有两个问题。
如果您可以分享任何经验来构建node.js服务,我将不胜感激。
谢谢,
杰弗里
最佳答案
您没有引起关注的一个问题是,模块可能会尝试直接连接到数据库本身或内部网络上的其他服务。可以通过设置模块无法轻易找到的密码来防止这种情况。
1.限制磁盘访问
该项目是去年在NodeConf上提出的。它试图在您描述的情况下严格限制文件系统访问。
https://github.com/yahoo/fs-lock
“此模块的目标是在您加载第三方模块并且您需要限制它们的访问时提供帮助。”
这听起来像是杰弗里在柏拉图答案中的评论中提出的建议。
(如果您想进一步研究 Hook OS调用,此hookit project可能会提出一些想法。尽管在当前形式下,它仅包装了回调函数,但它可能提供了 Hook 内容以及如何 Hook 的灵感。这是an example的意思。用过的。)
2.分析敏感数据的流
如果您仅担心数据窃取(而不是文件系统或数据库访问),则可以着重解决以下问题:
3.执行有效的代码审查
您可能不需要去Github来阅读代码。绝大多数软件包在
node_modules
的install文件夹中提供了所有源代码。 (但是,有一些提供二进制文件的软件包;这些软件包自然很难验证。)如果您确实想亲自检查代码,则可以使用一些方法来减少所涉及的工作量:
require
)从那里。 4.其他措施
将每个软件包的版本号锁定在
package.json
中可能是明智的,这样在您决定需要安装软件包之前,不要意外安装该软件包的新版本。您可以使用社会因素来建立对包装的信心。检查作者的受人尊敬。他是谁,他为谁工作?提交人及其雇主是否享有声誉?同样,谁在使用他的项目?如果该软件包非常流行,并且已被行业巨头使用,则其他人可能已经在审查该代码。
您可能希望访问github并通过“监视”存储库来启用所有正在使用的顶级模块的通知。这将通知您将来是否在软件包中报告了任何漏洞。