我想创建最简单的 node.js 服务器来提供静态文件。
这是我想出的:
fs = require('fs');
server = require('http').createServer(function(req, res) {
res.end(fs.readFileSync(__dirname + '/public/' + req.url));
});
server.listen(8080);
显然,这将映射http://localhost:8080/index.html
到project_dir/public/index.html
,对于所有其他文件也是如此。
我的一个担忧是有人可能会滥用它来访问project_dir/public
. 像这样的东西,例如:
http://localhost:8080/../../sensitive_file.txt
我尝试了一点,但它不起作用。但是,似乎我的浏览器正在删除“..”本身。这让我相信有人会滥用我可怜的 node.js 服务器。
我知道有做静态文件服务的 npm 包。但我真的很想在这里写我自己的。所以我的问题是:
这安全吗?
如果是这样,为什么?如果不是,为什么不呢?
而且,如果进一步,如果不是,那么“正确”的方法是什么?我的一个限制是我不想为每个可能的文件都有一个 if 子句,我希望服务器为我放入目录中的任何文件提供服务。