阻止用户使用PHP访问url中的文件?

时间:2012-08-06 21:09:52

标签: php .htaccess

有没有办法阻止用户输入网址并获取对特定目录中文件的访问权限,但仍允许PHP脚本访问该文件以进行更改或下载?

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

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

感谢任何帮助, 感谢

5 个答案:

答案 0 :(得分:3)

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

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

可能更好的想法是为整个安全文件夹制定规则 -

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

最后一种(可能是最好的)方法是在安全文件夹中创建一个额外的.htaccess,并拒绝对其进行所有访问。放置这一行 -

deny from all

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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

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

  1. 按来源IP限制访问

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

答案 3 :(得分:1)

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

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

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

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

更多信息

答案 4 :(得分:0)

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

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

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