静的ファイルを提供するための最も単純な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
、他のすべてのファイルにも同様にマップされます。
私の1つの懸念は、誰かがこれを悪用して、の外部のファイルにアクセスする可能性があることですproject_dir/public
。たとえば、次のようなものです。
http://localhost:8080/../../sensitive_file.txt
これを少し試してみましたが、うまくいきませんでした。しかし、私のブラウザは「..」自体を削除していたようです。これは、誰かが私のかわいそうなnode.jsサーバーを悪用する可能性があると私に信じさせます。
静的ファイル提供を行うnpmパッケージがあることを私は知っています。しかし、私は実際にここに自分自身を書くことに興味があります。だから私の質問は:
これは安全ですか?
もしそうなら、なぜですか?そうでない場合は、なぜですか?
そして、さらにそうでない場合、これを行うための「正しい」方法は何ですか?私の1つの制約は、可能なファイルごとにif句を設定する必要がないことです。ディレクトリにスローするファイルはすべて、サーバーに提供させます。