是否可以通过request.url遍历目录?

时间:2013-06-07 13:44:06

标签: node.js

我来自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>

1 个答案:

答案 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“错误:禁止”回应。