我有一个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服务器.它不知道谁是"正确的人"才能访问它,并且默认情况下会向任何和所有人提供请求.
如果您需要特定的访问控制机制,您自己有责任自行实施.
我注意到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)
归档时间: |
|
查看次数: |
10681 次 |
最近记录: |