除了特定网页之外的所有内容都无法访问URL

时间:2017-08-04 07:11:23

标签: php .htaccess security access restrictions

对于文件传输系统,我将数据存储在我的服务器上。可以使用URL访问数据,例如:

http://filestorage.example.com/files/clientfiles/clientid/test.pdf

文件夹clientid /中的所有文件都链接在客户端的生成下载页面上,例如:

http://example.com/download.php?clientid=28692692846

以上网址包含一个网页,其中包含指向clientid文件夹内所有文件的多个链接:

<a href="http://filestorage.example.com/files/clientfiles/clientid/test.pdf" download>
test.pdf
</a>
...

现在我想限制对文件的访问。从外部访问文件应该是不可能的,只能从download.php访问它们。 是否有可能实现这样的目标?

文件和脚本在同一台服务器上。

3 个答案:

答案 0 :(得分:0)

您可以将.htaccess文件放在包含以下内容的文件夹中:

deny from all

通过这种方式,您无法打开该文件夹中的任何文件,但您可以将它们包含在php中而不会出现任何问题。

答案 1 :(得分:0)

我能想到的最简单的方法是使用在/ clientid文件夹中的文件上生成的唯一会话变量 - 无论文件扩展名是什么,它们都是简单的PHP页面通过download.php加载文件。

session_start();
$_SESSION['file_id'] = $secret_file_id;
header("Location: http://example.com/download.php?clientid=28692692846");

然后在download.php文件中,检查此变量。

session_start();
if((isset($_SESSION['file_id'])) && ($_SESSION['file_id'] == $secret_file_id)) {
    // Offer file for download
} else {
    //Not referred from correct URL, reject.
}

答案 2 :(得分:0)

是的,您可以通过.htaccess使用以下方式实现此目的:

order deny,allow
deny from all
allow from example.com/download.php

除非他们通过example.com/download.php访问,否则将拒绝所有人访问。

如果你正在使用Apache 2.4,那么你需要使用:

Require all denied
Require host example.com/download.php

显然,您需要将.htaccess文件放入您希望限制访问的文件夹中。因此,如果我正确理解您的文件结构/clientid/