gpt4 book ai didi

apache - 只允许从它们所属的网站访问目录中的文件

转载 作者:行者123 更新时间:2023-12-02 00:06:08 25 4
gpt4 key购买 nike

我知道那里有很多类似的问题,我已经搜索了所有这些问题,但我似乎无法找到任何解决方案。

我网站的根目录下有一个文件夹,其中包含上传的文件,用户登录后可以从该网站查看和下载这些文件。它们位于:https://example.com/uploads (例如)。我需要该站点继续能够访问它们以显示它们(有些是图像)并提供下载链接(pdf 等)以便用户可以下载它们,但我想避免任何人掌握一个网址特定文件能够直接下载它们,如下所示:https://example.com/uploads/2020/02/myfile.pdf .或者这些 url 进入搜索引擎(或者如果它们进入,服务器会阻止它们被直接访问。

我已经尝试在上传目录中添加一个包含以下内容的 .htaccess 文件:

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

我试过了

Order Allow,Deny
Deny from all
Allow from 127.0.0.1

...正如我所读,这可能允许来自站点本身以及本地 url 的 HTTPS 调用。

但是它禁止站点和直接的 url 请求,这是不好的。

有办法吗?

最佳答案

The user interface that provides the ‘official’ access to the files has user authentication, yes, but the files still exist in a directory than won’t stop anyone getting to them if they know the url.

您需要使用您用于保护对用户界面的访问的相同身份验证系统来保护文件。您可以通过 IP 地址(客户端 IP 地址)保护这些资源的唯一方法 - 正如您目前在 .htaccess 中尝试的那样- 如果客户端的 IP 是固定的并且事先已知(但如果是这种情况,那么您就不需要另一种形式的身份验证了)。

因此,这将主要是对用于验证“用户界面”的任何脚本语言/CMS 的练习。

您可以使用什么 .htaccess for 是将对这些文件的请求重写到处理身份验证的服务器端脚本,然后在身份验证后将文件提供给客户端。

例如:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^uploads/. /serve-protected-file.php [L]

/uploads/<something> 的任何请求(例如 /uploads/2020/02/myfile.pdf ),映射到有效文件的文件将路由到您的脚本:/serve-protected-file.php .

/serve-protected-file.php然后需要执行以下操作:

// 1. Parse the file being requested from REQUEST_URI

// 2. Is the requested file "protected"?
// (Serving both protected and public files from the same directory?)

// 3. If not protected then serve/stream the resource to the client. END

// 4. If protected then authenticate the user...

// 5. If user authenticated then serve/stream the resource to the client. END

// 6. Resource is protected and user not authenticated...
// Serve a 403 Forbidden. END

(理想情况下,这些“ protected ”资源的位置将完全位于文档根目录之外 - 因此默认情况下它们是“私有(private)”的 - 并且用户用来访问这些资源的 URL 完全是虚拟的 - 那么你可能不会在 .htaccess 中不需要任何额外的编码,一切都将由您的前端 Controller 实现 - 但这完全取决于您的站点的实现方式和 URL 的路由方式。)

关于apache - 只允许从它们所属的网站访问目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60544447/

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