我正在将文件(pdf,doc,flv等)加载到缓冲区中,并通过脚本将其提供给我的用户。我需要我的脚本能够访问文件,但不允许直接访问它。实现此目标的最佳方法是什么?我应该使用我的权限来做某事还是使用.htaccess锁定目录?
Answers:
最安全的方法是将想要保留的文件放到Web根目录之外,就像Damien建议的那样。之所以可行,是因为Web服务器遵循本地文件系统特权,而不是其自身的特权。
但是,有很多托管公司仅允许您访问Web根目录。为了仍然阻止对文件的HTTP请求,请使用阻止所有通信的.htaccess文件将它们自己放置在目录中。例如,
Order deny,allow
Deny from all
您的Web服务器以及您的服务器端语言仍将能够读取它们,因为目录的本地权限允许Web服务器读取和执行文件。
Allow from 127.0.0.1
允许您的服务器(包括任何服务器端代码)访问该目录中的文件。有关这些位的更多文档,请访问httpd.apache.org/docs/2.4/mod/mod_mod_access_compat.html#allow
这就是我阻止直接从URL访问ini文件的方式。将以下代码粘贴到.htaccess
root上的文件中。(无需创建额外的文件夹)
<Files ~ "\.ini$">
Order allow,deny
Deny from all
</Files>
我的settings.ini
文件位于根目录上,如果没有此代码,则可访问www.mydomain.com/settings.ini
文件是否与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>