Shl*_*son 7 javascript php nginx node.js express
刚开始处理NodeJS网络应用程序并有一个基本问题.
由于我来自PHP领域,我知道PHP有一个内置的HTTP服务器但没有人实际使用它我们使用nginx和史前项目Apache作为HTTP服务器,当我进入ExpressJS我发现所有的例子都在谈论听取ExpressJS打开的HTTP服务器(当然是通过http NodeJS模块),但没有人谈论通过FastCGI(nginx - > FastCGI(例如node-fastcgi) - >我的ExpressJS应用程序)使用它,就像我以前用PHP做的那样(nginx - > PHP-fpm - >我的PHP env)我想知道为什么?
据我所知,NodeJS应用程序是非常快速,非阻塞I/O等等,但是有一个安全漏洞使用应用程序像每个人一样显示,因为运行的服务在JavaScript环境中具有相同的公共资源,一个用户例如,可以错误地(或不错误地)与他人共享敏感信息.让我们假设开发人员犯了这样的错误:
router.post('/set-user-cc', function(res){
global.user = new User({
creditCard: req.param('cc')
});
});
Run Code Online (Sandbox Code Playgroud)
其他用户请求:
router.get('/get-user-cc', funciton(req, res){
res.json(global.user);
});
Run Code Online (Sandbox Code Playgroud)
此时,每个用户将获得用户的CC信息.
通过FastCGI使用我的ExpressJS应用程序将为每个HTTP请求打开一个干净的JavaScript环境,用户不会互相伤害.
很高兴听到NodeJS(网络)应用程序经验丰富的开发人员为什么没有人建议使用FastCGI解决方案(在Google上搜索并几乎找不到任何东西),如果是这样,为什么它太糟糕了?
(ps这个例子只是为了证明这个问题不是某个人真正做过的事情,但是我们知道宇宙中存在很多愚蠢的人:)
谢谢!
如果你检查代码、在严格模式下运行并且不使用这样的全局变量,你就不会犯这样的错误。
另外,在 Nodejs Web 应用程序中,您通常希望使服务器无状态并将所有数据保留在数据库中。这也将使其成为更具可扩展性的架构。
在安全性非常重要的应用程序中,您也可以对其进行大量模糊测试来发现类似的问题。
如果你做到了这一切,再加上严格的代码审查流程,你就根本不用担心了。
FastCGI 并不能防止这个问题,因为单个或几个连接用于与处理请求的服务器(在本例中为 node.js)进行通信,并且 HTTP 连接通过它进行多路复用。一个 Node.js 进程将同时处理多个请求。
您可以以某种方式制定一个启动线程的解决方案,但速度会慢很多。如果您将 Node.js 用于需要高可靠性或不能承受小错误的事物(例如与健康相关的设备),那么 Node.js 是错误的平台。
| 归档时间: |
|
| 查看次数: |
3491 次 |
| 最近记录: |