Nodejs使用httpdispatcher提供静态图像

我正在使用httpdispatcher,并希望提供静态图像。 我有一个/资源文件夹在应用程序文件夹中。 并有下面的代码。 我试图http:// localhost:3000 / resources / abc.jpg来获取图像,但没有得到任何回应。 任何想法?

var http = require('http'); var dispatcher = require('httpdispatcher'); var express = require('express'); var app = express(); dispatcher.setStatic('resources'); dispatcher.setStaticDirname('.'); const PORT=3000; function handleRequest(request, response){ try { console.log(request.url); dispatcher.dispatch(request, response); } catch(err) { console.log(err); } } dispatcher.onGet("/page1", function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var response={"res":'Page One id: ' + req.params.id}; res.end(JSON.stringify(response)); }); dispatcher.onPost("/post1", function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); var response={"res":'Got Post Data appId: '+JSON.parse(req.body).appId}; res.end(JSON.stringify(response)); }); dispatcher.onError(function(req, res) { res.writeHead(404); res.end("NOT FOUND"); }); var server = http.createServer(handleRequest); server.listen(PORT, function(){ console.log("Server listening on: http://localhost:%s", PORT); }); 

为了使我的意见成为答案, httpdispatcher当前的静态资产实施被打破了几个原因。

  1. 不正确的pathparsing。 ( .处理不当,在代码中连接不好)出错行: var filename = "." + require('path').join(this.staticDirname, url.pathname); var filename = "." + require('path').join(this.staticDirname, url.pathname);

  2. 不会从它检查的path名中排除指定的资源url。 所以即使你指定. 作为静态目录,但将resources指定为URL处理程序,静态目录结构必须包含资源文件夹,或者URL必须包含.. ,这似乎是目录遍历攻击的成熟途径。

目前工作的用例可能有更好的包, 但值得向模块作者报告这些缺陷。 编辑:看起来像path遍历漏洞已经有问题, 目录parsing 。

目前,您可以通过HTTP服务器处理程序中的匹配来手动处理路由,也可以使用其他库。 仅举几例, 快递 , 饮食与静态饮食等。

编辑:看来这些问题可能已经解决了1.1.0如本问题所述 。