Node.js nodejs安全吗?

Node.js nodejs安全吗?,node.js,Node.js,我有一个linux机器,刚刚安装了nodejs。我看到的许多示例只是执行特定的功能,但没有看到它们“保护”nodejs服务器的任何地方?例如,对于php,我会使用会话来保护我网站的一个区域。nodejs现在还可以吗?它是否需要在nodejs中添加额外的设置或代码,以确保只有正确的人才能访问它?或者“开箱即用”可以吗?节点本质上只是一个web服务器。它不知道谁是访问它的“合适的人”,默认情况下会向任何和所有的访问者提供请求 如果您需要特定的访问控制机制,您有责任自己实现。Node.js正是从您创建

我有一个linux机器,刚刚安装了nodejs。我看到的许多示例只是执行特定的功能,但没有看到它们“保护”nodejs服务器的任何地方?例如,对于php,我会使用会话来保护我网站的一个区域。nodejs现在还可以吗?它是否需要在nodejs中添加额外的设置或代码,以确保只有正确的人才能访问它?或者“开箱即用”可以吗?

节点本质上只是一个web服务器。它不知道谁是访问它的“合适的人”,默认情况下会向任何和所有的访问者提供请求


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

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


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

我注意到http.createServer的示例是不安全的,如果您不将路径限定为允许的。e、 g:我能用卷发取东西

我解决了这个问题,不允许提供任何不在当前目录中的文件

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

if (filename.indexOf(__dirname) == 0 ) {
    path.exists(filename, function(exists) {

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

PHP不提供它生成的输出。此任务留给Apache或IIS等web服务器执行。PHP附带一个会话管理模块(通过super-global$\u Session变量公开),而Node.js附带一个web服务器模块(“http”)

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

事实上,“http”模块更像是以事件方式实现http协议。如果您需要一个“真正的”web服务器,像这样的项目将更适合您,因为它附带了像Apache这样的web服务器将提供的功能

顺便说一句,express框架已经提供了


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

Express支持会话,但我读过一些文章,建议在以下情况下不要使用会话: 出于性能原因,它分配内存。我已经使用sessionStorage来保存它的客户端用户名和密码。问题是黑客可以通过控制台访问,所以我找到了一些密码解密javascript库,比如sjcl()。但是 另一个问题是sjcl功能仍然可以在控制台中访问。所以我所做的就是重写 用户联机时的功能

   #offline - sjcl can access in console
   #online - override the sjcl to prevent access in console
   window.sjcl = -> "back-off hacker!"
我所做的是在服务器通过会话存储重新加载时将用户名和密码发送到服务器,以便它检查并响应适当的页面(脱机或联机)

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


另外,我正在使用angularjs和express.io

在一个没有权限访问您不想要的内容的帐户下运行node也是一个好主意。谢谢,我正在寻找一个基本示例,说明不使用express可能会遗漏的一件事。jsNode不是Web服务器。Express是节点上的web服务器。@Ped Express不是web服务器,而是web框架。js在核心中提供了一个http服务器,由Express扩展,因此nodejs是一个运行时。http模块使其成为一个web服务器。:)linux框是服务器:DThankfully Node.js不是PHP。这不安全。