阻止通过http直接访问文件,但允许php脚本访问

时间:2010-04-21 00:04:58

标签: php apache permissions

我正在将我的文件(pdf,doc,flv等)加载到缓冲区中,并使用脚本将其提供给我的用户。我需要我的脚本才能访问该文件但不允许直接访问它。什么是实现这一目标的最佳方式?我应该使用我的权限做某事还是用.htaccess锁定目录?

7 个答案:

答案 0 :(得分:89)

最安全的方法是将您想要保存的文件放在Web根目录之外,就像Damien建议的那样。这是因为Web服务器遵循本地文件系统特权,而不是它自己的特权。

但是,有很多托管公司只允许您访问Web根目录。要仍然阻止对文件的HTTP请求,请使用阻止所有通信的.htaccess文件将它们放入目录中。例如,

Order deny,allow
Deny from all

您的Web服务器以及服务器端语言仍然可以读取它们,因为目录的本地权限允许Web服务器读取和执行文件。

干杯。

答案 1 :(得分:32)

这就是我阻止从URL直接访问我的ini文件的方法。将以下代码粘贴到root上的.htaccess文件中。 (无需创建额外的文件夹)

<Files ~ "\.ini$">
  Order allow,deny
  Deny from all
</Files>

我的settings.ini文件位于根目录下,如果没有此代码,则可以访问www.mydomain.com/settings.ini

答案 2 :(得分:2)

文件与PHP脚本在同一台服务器上吗?如果是这样,只需将文件保留在Web根目录之外,并确保您的PHP脚本具有读取权限,无论它们存储在何处。

答案 3 :(得分:2)

在httpd.conf中阻止浏览器&amp; wget访问包含文件,特别是说db.inc或config.inc。请注意,您不能在指令中链接文件类型,而是创建多个文件指令。

<Files ~ "\.inc$">
Order allow,deny
Deny from all
</Files>

在重新启动apache之前测试你的配置

service httpd configtest

然后(优雅重启)

service httpd graceful

答案 4 :(得分:1)

如果您有权访问httpd.conf文件(在ubuntu中它位于/ etc / apache2目录中),您应该添加与特定目录中.htaccess文件相同的行。那是(例如):

ServerName YOURSERVERNAMEHERE
<Directory /var/www/>
AllowOverride None
order deny,allow
Options -Indexes FollowSymLinks
</Directory>

对要控制信息的每个目录执行此操作,并且您将在一个位置拥有一个文件来管理所有访问。上面的例子,我为根目录/ var / www。

做了这个

此选项可能不适用于外包托管,尤其是共享托管。但它比添加许多.htaccess文件更好。

答案 5 :(得分:0)

要阻止来自Web访问的.ini文件,请将以下内容放入apache2.conf

<Files ~ "\.ini$">
Order allow,deny
Deny from all
</Files>

答案 6 :(得分:0)

基于自定义模块的.htaccess脚本(如CodeIgniter中使用的脚本)怎么样?我尝试了一下,在CodeIgniter应用程序中效果很好。有在其他应用程序上使用它的想法吗?

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>