0

有没有办法阻止用户输入 url 并访问特定目录中的文件,但仍然允许 PHP 脚本访问该文件以更改或下载它?

换句话说,我想阻止人们输入:http ://www.mysite.com/securefolder/file1.pdf 。也许将它们重定向到不同的页面或其他东西。

但我不想完全锁定文件,因为我仍然需要使用 PHP 脚本来下载和修改文件。

任何帮助表示赞赏,谢谢

4

5 回答 5

3

如果您想要的只是某个文件的特定设置,那么您只需要一个非常简单的规则 -

RewriteEngine on
RewriteRule ^/securefolder/file1.pdf$ access_denied.php

更好的主意是为整个安全文件夹制定规则 -

RewriteEngine on
RewriteRule ^/securefolder/.*$ access_denied.php

最后一种(可能也是最好的)方法是.htaccess在受保护的文件夹中创建一个附加文件夹,然后简单地拒绝对它的所有访问。放置这一行 -

deny from all

在所有解决方案中,我们只讨论外部请求。您的所有脚本和脚本、文件等的内部路径将保持不变,不受您在.htaccess文件中定义的规则的影响。

于 2012-08-06T21:12:13.287 回答
2

禁用对网络服务器上文件的直接访问,并从 PHP 脚本提供文件(本手册页上的一些提示:http ://www.php.net/manual/en/function.readfile.php )。Web 服务器访问限制不会影响 PHP,因为它直接访问文件系统。这是一个类似的问题:Secure files for download

如果性能很关键,大多数网络服务器都有插件,可以帮助您直接提供文件(绕过 PHP):

于 2012-08-06T21:17:40.880 回答
1

理想的方法将取决于 PHP 脚本是在磁盘上本地访问 PDF 文件,还是通过 http 远程访问。

如果 PHP 脚本在本地访问磁盘上的文件,只需将文件放在网站的根文件夹之外。

如果 PHP 脚本通过 http 远程访问文件,这里有一些选项:

  1. 通过源 IP 限制访问

  2. 密码保护资源并通过 https 提供服务

于 2012-08-06T21:12:34.880 回答
1

如果文件位于同一台服务器上,则无需下载它们即可提供服务。只需从文件系统中读取它们并直接输出它们。

但是,如果它们不是,并且您需要一个脚本才能下载文件,而其他脚本被拒绝,您可以使用密码保护目录。

然后使用例如cURL下载文件,您可以指定以下选项:

curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

更多信息

于 2012-08-06T21:13:22.213 回答
0

将您的数据文件放在公共网络空间之外。使用 PHP 读取文件并提供服务。

除非您希望公开提供文件,否则源文件没有理由位于 Web 主机的 DocumentRoot 中。

PHP 脚本以本地用户身份运行,因此即使在 Apache(或其他)Web 服务器范围之外也能够读取文件。

于 2012-08-06T21:12:40.960 回答