nodejs是安全的吗?

我有一个Linux的盒子,只是安装nodejs。 我看到的很多例子只是做一个特定的function,但没有看到他们“保护”nodejs服务器的任何地方? 例如对于PHP我会使用会话来确保我的网站的一个区域。 nodejs按原样? 在nodejs中是否需要额外的设置或代码来确保只有合适的人才能访问它? 或者,它可以“开箱即用”吗?

节点本质上只是一个Web服务器。 它不知道谁是“正确的人”可以访问它,默认情况下会向所有来访者发送请求。

如果您需要特定的访问控制机制,则您自己负责实施。

Node.js本身不是一个Web服务器。 这是一个用Javascript编程的asynchronous事件引擎。 🙂

PHP不提供它生成的输出。 这个任务留给像Apache或IIS这样的Web服务器。 PHP带有一个会话pipe理模块(通过超全局的$ _SESSIONvariables公开),而Node.js带有一个web服务器模块(“http”)。

Node.js允许你在一个环境中执行这两个操作,因为它可以让你和你的程序自己实例化一个Web服务器。 这使得将function作为普通的旧式HTTP(s)Web服务器公开到networking上非常容易,而对于PHP,您的环境受到Web服务器configuration的限制。

实际上,认为“http”模块更像是一个HTTP协议的实现。 如果你需要一个“真正的”networking服务器,像express这样的项目将更适合你,因为它具有像Apache这样的Web服务器提供的function。

顺便说一下,expression式框架已经提供了会话支持 。

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

我注意到,http.createServer的例子是不安全的,如果你没有限定path被允许。 例如:我可以通过curl获取http://localhost/../../../../../etc/passwd 。

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

var filename = path.normalize( path.join(process.cwd(), uri) ); if (filename.indexOf(__dirname) == 0 ) { path.exists(filename, function(exists) { 

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

关于从基础设施的angular度来保护服务器,你可以把它放在像NGiNX这样的反向代理之后,并且使用防火墙来根据你的需要打开NGiNX端口80或443。 这通常很方便,因为您将运行多个Node实例以匹配您的CPU内核数量,而反向代理可以在这两者之间循环,同时允许您保持端口closures。

Express支持会话,但我读过一些文章,build议不要使用会话,如果性能导致它分配内存。 我用sessionStorage来保存它的客户端用户名和密码。 问题是黑客可以通过控制台访问,所以我发现一些密码解密JavaScript库像sjcl( http://crypto.stanford.edu/sjcl/ )。 但是接下来的另一个问题是sjcl函数可以在控制台中访问。 所以我所做的是在用户在线时重写函数。

  #offline - sjcl can access in console #online - override the sjcl to prevent access in console window.sjcl = -> "back-off hacker!" 

我所做的是通过sessionStorage重新加载时发送用户名和密码到服务器,以便它将检查并响应适当的页面(离线或在线)。

但是这个安全当然只适用于普通网站,感觉不推荐给一些银行或者政府。 我希望你能明白.. ^ _ ^

PS。 我正在使用angularjs和express.io