我来自PHP,您可以在URL中注入双点以尝试目录遍历。在NodeJS中,您似乎得到Http
网络服务器会自动从网址中删除双点。
例如,如果你转到http://example.com/static/../app.js
,似乎Node重定向到http://example.com/app.js
,然后在我的情况下会抛出404,因为没有以{{1}开头的URL回调}}
在使用/static/
包创建的NodeJS HTTP网络服务器中,假设通过request.url
进行的目录遍历不是否安全? < / p>
答案 0 :(得分:4)
我会说你可以肯定这是不可能的,然后我尝试了,我不得不说,不,似乎http模块不会删除'/../'。您看到的重定向是在浏览器中完成的。因此,它是否存在安全风险取决于您的静态处理程序的实现方式。
概念证明:
// Server
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(req.url);
}).listen(1337);
卷曲:
curl "http://localhost:1337/static/../app.js"
# /static/../app.js
因此,如果你使用一个只使用path.resolve()的自制静态处理程序,你就搞砸了。希望像express.static这样受欢迎的人已经考虑过这个问题,但我还没有尝试过。
<强>更新强>
Express确实以404“错误:禁止”回应。