Nodejs使用httpdispatcher提供静态图像

时间:2016-05-02 18:28:30

标签: javascript node.js

我正在使用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);
});

1 个答案:

答案 0 :(得分:2)

要将我的评论用于答案,httpdispatcher当前的静态资产实施会因某些原因而中断。

  1. 路径解析不正确。 (.未得到妥善处理,并且在代码中加入得很差)违规行:var filename = "." + require('path').join(this.staticDirname, url.pathname);

  2. 不会从其检查的路径名中排除指定的资源URL。因此,即使您将.指定为静态目录,但指定resources作为URL处理程序,静态目录结构也必须包含资源文件夹,或者URL必须包含..,就像目录遍历攻击的成熟途径一样。

  3. 对于您目前正在使用的用例,可能有更好的软件包,但值得向模块作者报告这些缺陷。编辑:看起来已经存在问题{{ 3}}和path traversal vulnerability

    目前,您可以通过HTTP Server处理程序中的匹配手动处理路由,也可以使用其他库。仅举几例,directory resolutionExpressDiet

    编辑:从diet-static中所述的1.1.0开始,这些问题似乎已得到解决。