我想从node.js中的/ok/ä.txt
获取/very///bad/%D0%B9/../../../../../request/../ok/%C3%A4.txt
我发现了以下方法:
var url = require('url'), path = require('path');
require('http').createServer(function (request, response) {
var file = null;
try {
file = path.normalize(decodeURI(url.parse(request.url).pathname));
} catch (e) {
}
console.log(file);
response.end();
}).listen(3002, '127.0.0.1');
是否存在更好的方法,没有try / catch块?
答案 0 :(得分:0)
我认为你可以摆脱try..catch
阻止,因为path.normalize
和decodeURI
永远不会抛出错误而url.parse
只会抛出错误,如果参数不是类型为string
:
...
if (typeof url !== 'string') {
throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
}
...
由于request.url
始终属于string
类型,因此也不会发生。