【发布时间】:2014-04-29 02:52:20
【问题描述】:
我正在使用 restify for node 创建一个简单的 API。我想要一个目录/public,人们可以简单地浏览到该目录并下载他们浏览到的文件。
为此,我使用了/routes/public.js:
server.get(/\/public\/?.*/, restify.serveStatic({
directory: __dirname + '/../'
}));
因为我的文件结构是这样的:
index.js
/routes
public.js
/public
files
to
be
served
但是,我注意到一个很大的安全问题。浏览http://domain.com/public/../index.js即可下载源代码!显然,我不希望这种情况发生。
这是一项权限工作还是我应该做的其他事情?谢谢
【问题讨论】:
-
您确定正确设置了目录值吗?不应该是 `directory: __dirname + '/public/' 吗?
-
在阅读文档和另一个 SO 答案后,
directory是路径的前缀,因此设置__dirname + '/public'将采用路径/routes/public/public/filestobeserved。我已经尝试更改静态文件目录,但我仍然可以通过在 url 中包含../来上文件夹。 -
根据restify文档,提供的路径已经是相对于正在运行的进程位置。在这种情况下,您只需要
'./public/'。无论如何,正如你所说,这不是你的问题的原因。我将在下面提交答案。
标签: javascript node.js restify