繁体   English   中英

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

[英]Block direct access to a file over http but allow php script access

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

最安全的方法是将想要保留的文件放到Web根目录之外,就像Damien建议的那样。 之所以可行,是因为Web服务器遵循本地文件系统特权,而不是其自身的特权。

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

Order deny,allow
Deny from all

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

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

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

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

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

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

在重新启动Apache之前测试您的配置

service httpd configtest

然后(正常重启)

service httpd graceful

文件是否与PHP脚本位于同一服务器上? 如果是这样,只需将文件放在Web根目录之外,并确保您的PHP脚本无论存储在哪里都具有读取权限。

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

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

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

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

为了防止.ini文件通过Web访问,请将以下内容放入apache2.conf中

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM