我正在使用httpdispatcher并希望提供静态图片。我在app文件夹中有一个/ resources文件夹。并有下面的代码。我尝试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);
});
答案 0 :(得分:2)
要将我的评论用于答案,httpdispatcher
当前的静态资产实施会因某些原因而中断。
路径解析不正确。 (.
未得到妥善处理,并且在代码中加入得很差)违规行:var filename = "." + require('path').join(this.staticDirname, url.pathname);
不会从其检查的路径名中排除指定的资源URL。因此,即使您将.
指定为静态目录,但指定resources
作为URL处理程序,静态目录结构也必须包含资源文件夹,或者URL必须包含..
,就像目录遍历攻击的成熟途径一样。
对于您目前正在使用的用例,可能有更好的软件包,但值得向模块作者报告这些缺陷。编辑:看起来已经存在问题{{ 3}}和path traversal vulnerability。
目前,您可以通过HTTP Server处理程序中的匹配手动处理路由,也可以使用其他库。仅举几例,directory resolution,Express与Diet等
编辑:从diet-static中所述的1.1.0
开始,这些问题似乎已得到解决。