在PHP网站开发中,为了让网站目录文件和程序代码的安全考虑,我们必须对某些目录或者文件的访问权限进行控制,来提高网站的安全,那么我们怎样来实现这种功能呢?因此很多时候我们需要禁止服务器上某个目录或文件被访问,主要是对Apache的配置文件进行操作,有两种方法。
1.修改http.conf文件
(1).打开apache配置文件httpd.conf
(2).找到
<Directory /> Options Indexes AllowOverride None Order allow,deny Allow from all </Directory>
只需要修改Options Indexes为Options None即可,注:根据PHP运行环境安装包的不同,Options Indexes也有可能是Options Indexes FollowSymLinks,一并改为Options None即可。
Forbidden
You don’t have permission to access / on this server.
Indexes 的作用就是当该目录下没有 index.html 或index.php文件时,就显示目录结构,去掉 Indexes,Apache 就不会显示该目录的列表了。
Apache单个或多个目录禁止访问方法
这种方法通常用来禁止访问者访问后台管理目录或者程序目录,方法如下
(1).打开apache配置文件httpd.conf
(2).创建Directory块,比如禁止访问某个类库目录,可以这样实现
<Directory /var/wwww/inc> Order Deny,Allow Deny from all </Directory>
更改为
<Directory /var/www/*/inc>
(3).重启Apache服务器。即可。
其他说明
(1).只允许或禁止某个域名进行目录访问
<Directory /var/www/inc> Order Deny,Allow Deny from abc.com Allow from apache.org </Directory>
<Directory /var/www/inc> Order Deny,Allow Deny from 10.1.1.2 Allow from 192.168.1.0/255.255.255.0 </Directory>
注意:Allow from 192.168.1.0/255.255.255.0等同于Allow from 192.168.1或Allow from 192.168.1.0/24上述代码实现禁止IP10.1.1.2访问inc目录,允许IP192.168.1子网中的主机访问inc目录的功能。
2.添加.htaccess文件
上面那种方法在我的Mac下好像实现起来有问题,修改了httpd.conf文件之后重启Apache,无法访问任何本地网站链接了,应该还是修改有问题,还没摸索出来。之后便使用了另外一个方法,其实我感觉这个方法更方便。如果只是想禁止某一个目录或某个目录下的文件,只需要在该目录下新建一个.htaccess文件,然后输入一些配置信息即可。
先说明一下什么是.htaccess文件,.htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。.htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。.htaccess的用途范围主要针对当前目录。
这里我们就关注使用.htaccess文件来限制访问某个目录或该目录下的文件。
(1).在进行.htaccess文件配置之前,需要先确定httpd.conf文件是否配置了允许.htaccess文件的作用。因为要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。
从安全性考虑,根目录的AllowOverride属性一般都配置成不允许任何Override,即:
< Directory /> AllowOverride None < /Directory>
在我本机Mac电脑上,由于使用1中的方法新增<Directory></Directory>导致错误,不知什么原因,应该是我还没搞明白。因此我就修改了其原有的一个<Directory></Directory>,如下图所示,将AllowOverride none 改为了 AllowOverride All,出于安全性考虑最好是想在哪个目录下添加.htaccess文件就增加一个<Directory></Directory>,并配置目录路径,添加AllowOverride All。(这个还需后续摸索成功)在 AllowOverride 设置为 None 时,.htaccess 文件将被完全忽略。当此指令设置为 All 时,所有具有 “.htaccess” 作用域的指令都允许出现在 .htaccess 文件中。
还需要注明的是,在购买的阿里虚拟主机上,好像不必对httpd.conf进行配置,.htaccess文件即可生效?
(2).对httpd.conf配置完之后,便可以在需要设置访问权限的目录下新建一个.htaccess文件,添加相关的配置代码即可。比如如果想禁止所在目录以及其目录下的所有文件访问。可进行如下配置:
order allow,deny deny from all
如果只是想禁止所在目录下的特定格式的文件可进行如下配置:
<Files ~ "\.(pdf|psd|zip|rar)$"> Order allow,deny Deny from all </Files>
输入Files后的波浪线表示启用“正则表达式”,简单的写法有:<Files *>,表示禁止访问该目录下所有文件。