Node.JS Web服务器中的安全性

34

那么,我正在学习Node.JS,目前为止我非常喜欢它。我在工作中已经有几个项目,我认为我可以利用nodejs。

但是,我担心安全性问题。如果我使用Node.JS的http模块编写自定义web服务器,我是否容易受到攻击?Apache/IIS已经有了多年的专业团队来构建他们的web服务器安全性,但人们仍然不断发现漏洞...我的自制web服务器是否容易受到攻击呢?

我可以专注于哪些方面来构建一个良好的网络服务器安全层?有没有好的文章涵盖这个主题?

4个回答

9

我同意anm和schaermu的观点,建议使用反向代理来保证应用程序不会被访问到,这与稳定性有关,而非安全性。

我想补充说明的是,您还需要考虑如何安全地安装Node本身及其模块。特别是千万不要使用以下方法安装npm:

curl http://npmjs.org/install.sh | sudo sh

这基本上是将根Shell授予使用不安全的HTTP从网络获取的任何内容,而且完全没有验证,甚至不知道你在和谁交流。这可能会导致使用非常基本和广泛已知的方法严重妥协您的整个系统,如果您的系统被攻击,则无论您的应用程序是否位于反向代理、防火墙或其他任何位置都无济于事。请参见此答案以获得更全面的解释。


1
好的想法,但它们并不能真正帮助你。一旦你克隆了一个git仓库并运行它的makefile,你就可能被感染。一旦你安装了一个恶意的npm包,你就可能被感染。此外,只要你的账户能够sudo并且有时候使用它,那么在被感染时不是root对攻击者进行恶意操作的能力几乎没有影响。 - thejh

8
有多年专业团队将安全性纳入Apache / IIS的原因是因为它们是全面的服务器。它们可以默认运行各种服务,使用需要修补的X软件版本等等。
我发现Node.JS的其中一个好处是,你可以告诉它你想在特定应用程序的操作系统级别上运行什么。如果你不想要中间层,就没有中间层。如果我在我管理的服务器上托管它,我所担心的只有操作系统级别端口和Web应用程序代码。不需要Apache配置文件、模块更新等等。
因此,当涉及到Node.JS的安全性时,应该考虑在执行之前清理外部信息,在可能有害的操作上验证身份等等。尽可能地关闭。使用SFTP将文件传输到远程托管服务器,并只打开必要的端口以使您的Web应用程序正常运行。

5

2
目前NginX无法在Http 1.1中进行代理,因此如果您使用NodeJS + WebSockets,则在这种情况下NginX不是一个团队合作伙伴。 - Purefan
@Purefan那在这种情况下的选择会是什么呢?是不带nginx的原始NodeJS http服务器吗? - jwchang
我相信HAProxy支持后端服务器的http 1.1。但是,就目前而言,在使用socket.io时跳过NginX是一个好方法。 - Purefan

3

您可能想使用反向代理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接