2010-04-21 145 views
59

我正在将我的文件(pdf,doc,flv等)加载到缓冲区中并使用脚本将它们提供给我的用户。我需要我的脚本能够访问该文件,但不允许直接访问它。什么是达到这个目标的最好方法?我应该使用我的权限执行某些操作还是使用.htaccess锁定目录?阻止通过http直接访问文件,但允许php脚本访问

+0

愿你看看[这]之前测试你的配置[1] [1] :http://stackoverflow.com/q/43951871/2441637 – 2017-05-13 15:19:24

回答

77

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

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

Order deny,allow 
Deny from all 

您的Web服务器,因此服务器端语言,仍然可以阅读他们,因为该目录的本地权限允许Web服务器来读取并执行文件。

干杯。

+0

我已经使用此内部音频文件夹,但它是停止我的音频播放器播放音频。我正在使用声音管理器2播放音频。是否有任何解决方法只允许声音管理器播放该音频文件,但是不能停止其他直接访问? – sonill 2013-07-29 06:07:40

+3

@sonill - 您可以将某些IP列入白名单以便能够访问这些目录。例如,添加一个带有“Allow from 127.0.0.1”的新行将允许您的服务器(包括任何服务器端代码)访问该目录中的文件。有关这些位的更多文档可在http://httpd.apache.org/docs/2.4/mod/mod_access_compat.html#allow – 2013-07-30 16:38:21

+1

“但是,有很多托管公司只允许您访问Web根目录。 “为什么这些公司不能将Web根放在比FTP根低一级的地方?他们对PHP的工作方式没有任何知识(或者更可能是一种监督),还是只关心自己的安全和金钱?哦,只需选择一家公司,实际上会对您网站的安全性产生极大的影响。 – FluorescentGreen5 2017-03-30 04:58:18

2

这些文件与PHP脚本在同一台服务器上吗?如果是这样,只需将文件保留在Web根目录下,并确保您的PHP脚本对于存储的任何位置都具有读取权限。

28

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

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

settings.ini文件是根,没有这个代码是可访问的www.mydomain.com/settings.ini

1

如果您有机会获得你的httpd。 conf文件(在ubuntu中它位于/ etc/apache2目录中),你应该添加与你在特定目录中的.htaccess文件相同的行。这是(例如):

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

执行此操作要控制信息的每个目录下,你将不得不在一个地方一个文件来管理所有的访问。它是上面的例子,我做了根目录/ var/www。

此选项可能不适用于外包托管,尤其是共享托管。但这是一个比添加许多文件更好的选择。

2

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

​​

在重新启动Apache的

service httpd configtest 

然后(平滑重启)

service httpd graceful 
相关问题