nodejs是否安全?

Joh*_*ohn 16 node.js

我有一个linux盒子,刚安装了nodejs.我看到的很多例子只是做了一个特定的功能,但是没有看到他们"保护"nodejs服务器的任何地方?例如对于php我会使用会话来保护我网站的某个区域.nodejs是否正常?它是否需要nodejs中的其他设置或代码才能确保只有合适的人才能访问它?或者"开箱即用"是否正常?

小智 26

Node.js本身不是Web服务器.它是一个用Javascript编程的异步事件引擎.:)

PHP不会为它生成的输出提供服务.此任务留给Apache或IIS等Web服务器.PHP附带了一个会话管理模块(通过超全局$ _SESSION变量公开),而Node.js附带了一个Web服务器模块("http").

Node.js允许您在一个环境中执行这两个操作,因为它允许您和您的程序自己实例化Web服务器.这使得将功能作为普通的旧HTTP Web服务器公开非常非常容易,而使用PHP,您的环境受到Web服务器配置的限制.

事实上,将'http'模块更像是一种多变的HTTP协议实现方式.如果您需要一个"真正的"Web服务器,像express这样的项目将更适合您,因为它带有像Apache这样的Web服务器提供的功能.

顺便提一下,快递框架已经提供了会话支持.

所以,要真正回答你的问题:是的,Node.js是可以的,因为它本身不是一个Web服务器.拉入模块时,必须考虑其设置.您可以完全控制"用户代理体验".


Gre*_*ill 12

从本质上讲,Node只是一个Web服务器.它不知道谁是"正确的人"才能访问它,并且默认情况下会向任何和所有人提供请求.

如果您需要特定的访问控制机制,您自己有责任自行实施.

  • @Ped Express不是一个Web服务器,它是一个Web框架.Node.js在其扩展的核心内提供了一个http服务器. (21认同)
  • 节点不是网络服务器.Express是Node上的Web服务器. (8认同)
  • 所以nodejs是一个运行时.http模块使它成为一个Web服务器.) (3认同)

cho*_*ovy 7

我注意到http.createServer的示例是不安全的,如果你没有将路径限定为允许的话.例如:我能够用curl 获取http://localhost/../../../../../etc/passwd.

我通过不允许提供不在当前目录中的任何文件来解决问题.

var filename = path.normalize( path.join(process.cwd(), uri) );

if (filename.indexOf(__dirname) == 0 ) {
    path.exists(filename, function(exists) {
Run Code Online (Sandbox Code Playgroud)

  • 在没有权限访问您不想要的权限的帐户下运行节点也是一个好主意. (3认同)

Chr*_*s F 5

Node.js就是服务器端javascript从您创建的模块运行的环境.它为您提供了许多内置库/模块,如http/https.安全,身份验证和授权方面的任何事情都必须由您编写或使用开源模块合并.如果您正在编写Web应用程序,请将Express视为您的框架,并使用其会话功能来帮助构建.

关于从基础架构角度保护服务器,您可以将其置于NGiNX等反向代理之后,并使用防火墙仅根据您的需要打开NGiNX端口80或443.这通常很方便,因为您将运行多个Node实例以匹配您的CPU核心数,并且反向代理可以在这些实例之间循环,同时允许您保持端口关闭.