gpt4 book ai didi

javascript - Restify 静态服务暴露其他文件

转载 作者:行者123 更新时间:2023-11-30 12:43:53 28 4
gpt4 key购买 nike

我正在为 Node 使用 restify 来创建一个简单的 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 可以下载源代码!显然,我不希望这种情况发生。

这是一项权限工作还是我应该做的其他事情?谢谢

最佳答案

Restify 会检查以确保您没有在指定目录之外提供文件。您将静态文件的根目录指定为 __dirname + '/../',这是应用程序的根目录。这意味着您的应用程序中的所有文件都可以通过静态方式提供。如果你只想要 restify 提供的 ./public/ 文件夹中的文件,你必须使用它作为目录。

问题源于他们处理映射路由到静态文件的方式困惑(在我看来计划不周)。如您所说,完整路径包含在所请求文件的路径中。这导致像这样的尴尬情况。您有一个公用文件夹,并且还希望路由包含 public。这意味着您的资源必须有一个 ./public/public 文件夹。另一种方法是在您的 route 不包括 public 。您可以像这样设置静态处理程序:

server.get(/.*/, restify.serveStatic({
directory: './public/'
}));

然后对 /somefile.txt 的请求将路由到 `./public/somefile.txt'。

关于javascript - Restify 静态服务暴露其他文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23329104/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com