前阵子,我刚刚把我的网站从ASP转到PHP,并启用了UrlRewrite的功能,但是发现我的网站每个目录都是可以被打开的浏览的,这样感觉很不安全,尤其是当网站上放了许多文件可以下载的情况下。
所以我就拼命的去找怎么样去关闭Apache下目录浏览权限的文章,但是搜到的大部分都是去更改Apache的配置文件,而由于我的网站不是独立主机,而是一个虚拟主机,所以只能通过配置.htaccess来实现关闭目录浏览权限,找了半天,终于找到了这么一篇文章。现放出来与大家一起共享。以下是具体文件的内容:
默认情况下,Apache是打开目录浏览功能的,其配置文件/etc/httpd/conf/httpd.conf中有如下参数:
Options Indexes FollowSymLinks
……
也就是说,在目录下没有默认首页面(如:index.html index.php等)时,可以让用户直接浏览web目录架构,这可能会导致一些重要的目录或配置文件被公开。
通常在Web应用上也会做一些安全考虑,一些目录下会有类似的文件:
# cat inc/index.php
<?php
die (’Access Denied’);
?>
这样,可以避免用户直接浏览该目录时,看到整个目录结构。但如果访问它下面的子目录就没什么作用了,所以,这还是不太安全。
安全起见,我建议还是把Indexes选项关闭比较好,方法有两种:
1、全局关闭
修改上面提到的配置文件/etc/httpd/conf/httpd.conf:
把Options Indexes FollowSymLinks
改为Options -Indexes FollowSymLinks
重启httpd服务即可,这样可以把所有网站的Indexes选项都取消。
2、修改.htaccess文件
如需要针对特定的网站取消该功能,可以先打开.htaccess支持,修改/etc/httpd/conf/httpd.conf:
……
AllowOverride None
……
修改为:
……
AllowOverride All
……
然后,在各网站的主目录下写入一个.htaccess文件,内容有:
# head .htaccess
Options -Indexes
RewriteEngine on
RewriteBase /
……
保存后马上生效。这时,访问同样的路径,就会报错误提示。
※从服务层面去屏蔽类似的问题,会比从应用层面解决要更安全和可靠。很多应用程序的默认设置都是比较宽松的,所以,在对外公布网站的时候,务必做好类似的安全检查,防止漏洞和隐患。