仅允许从 php 脚本访问 Apache 2.4 目录-如何?

问题描述 投票:0回答:2

我有一个 Windows Apache Web 服务器,它有一个映射到我的 Linux 映像服务器的驱动器。 Linux 映像有一个目录,将 pdf 文件存储在我们通过 PHP 脚本访问的特定目录中。在我的 httpd.conf 文件中,我们有一个别名设置,允许使用

Require All granted
访问此目录。好吧,问题是我们最近发现,如果有人知道文档的名称,他们只需在网络浏览器中输入我们的
domain.com/<directory>/nameofdocument.pdf
,就可以访问我们图像服务器上的pdf文档。当然,他们必须知道文件的确切名称,包括它存储在哪个目录中才能调出 pdf 文件。这是我们不想允许的安全漏洞。我不希望有人能够在地址栏中输入我们的服务器地址并以这种方式调出文档。我们的 php 脚本访问该目录,用户可以单击链接以提取文档。

换句话说,如果他们登录到我们的代理系统(这是一个 php 编写的系统)并且他们通过我们的成像 php 脚本访问,我只希望能够允许他们查看 pdf。这可能吗?

这就是我的

<directory>
指令的样子。

Alias /ourdocs/ "Z:/documents/"
<Directory "Z:/documents">
    Options none
    AllowOverride all
    Require all granted
</Directory>
php windows webserver apache2.4
2个回答
0
投票

将documents文件夹放在网站外,Apache中不为其配置目录。然后有一个

getDocument.php
脚本,当传递合适的文档ID时(例如,也许您的数据库中列出了存储的文档?),首先检查用户是否具有有效的登录会话,然后,如果是,则输出文件使用
readFile()
到客户端(当然还设置合适的标题,以便下载)。

这样,对文件的唯一访问是通过首先验证您的状态的脚本。直接链接不起作用,因为没有指向文件本身的直接 HTTP 路由。


-1
投票

为了阻止“外部人员”访问文件或目录,您可以修改显示的指令

<Directory "Z:/documents">
  Require local
  Require ip 172.16.0.10
  Require ip 192.168.1.0/24
  Require all denied
</Directory>

在此示例中,只有“localhost”(网络服务器本身)、ip 为 172.16.0.10 的机器和子网 192.168.1.0/24 中的任何机器都可以直接访问该目录。

© www.soinside.com 2019 - 2024. All rights reserved.