3

我来自 PHP,您可以在其中将双点注入 URL 以尝试目录遍历。在 NodeJS 中,您似乎让Http网络服务器自动从 URL 中删除双点。

例如,如果您转到http://example.com/static/../app.js,似乎 Node 重定向到http://example.com/app.js,然后在我的情况下会引发 404,因为对于不以 开头的 URL 没有回调/static/

假设在使用该包创建的 NodeJS HTTP 网络服务器中request.url无法进行http目录遍历是否安全?

4

1 回答 1

5

我要说你可以确定这是不可能的,然后我试过了,我不得不说不,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  --path-as-is "http://localhost:1337/static/../app.js"
# /static/../app.js

因此,如果您使用仅使用 path.resolve() 的自制静态处理程序,您就完蛋了。希望像 express.static 这样受欢迎的人已经考虑过这一点,但我还没有尝试过。

更新

Express 确实以 404“错误:禁止”响应。

于 2013-06-07T14:58:58.067 回答