<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
ServerAlias 123.com
<Directory /data/wwwroot/www.123.com>
SetEnvIfNoCase Referer "http://www.123.com" local_ref
SetEnvIfNoCase Referer "http://123.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
</Directory>
</VirtualHost>
curl -e "http://www.aminglinux.com/123.html" 自定义referer,注意该referer的格式
针对php文件和图片我们分别作带referer和不带referer的测试:curl -x127.0.0.1:80 123.com/admin.php -I
curl -x127.0.0.1:80 -e "http://www.baidu.com" 123.com/admin.php -I
curl -x127.0.0.1:80 123.com/images/1.jpg -I
curl -x127.0.0.1:80 -e "http://www.baidu.com" 123.com/images/1.jpg -I
对于一些比较重要的网站,除了我们前面提到的使用用户认证限制访问之外,还可以通过限制访问ip实现访问控制。比如涉及后台的访问,我们可以只开放内网ip或这极少数ip。我们可以指定限制访问的目录或者是某类文件。
访问控制Directory
核心配置文件内容
<Directory /data/wwwroot/www.123.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
-t graceful 后,我们分别用127.0.0.1和本机ens33 ip 192.168.226.130进行测试curl -x127.0.0.1:80 123.com/admin/admin.php -I
curl -x192.168.226.130:80 123.com/admin/admin.php -I
curl -x192.168.226.130:80 123.com/admin.php -I
访问控制FilesMatch
核心配置文件内容
<Directory /data/wwwroot/www.123.com>
<FilesMatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
-t graceful 后继续测试curl -x127.0.0.1:80 123.com/admin.php -I
curl -x192.168.226.130:80 123.com/admin.php -I
curl -x192.168.226.130:80 123.com/345.php -I
filematch 匹配amin.php 字段,包含该字段则只允许127.0.0.1这个ip访问。
最后总结:
我们发现防盗链和后面的访问控制 order 这一行有区别。 防盗链中是这样的,Order Allow,Deny 意思先执行允许,再执行拒绝。先允许所有的访问,再拒绝filematch匹配的文件的带refer访问。 访问控制中是这样的,Order deny,allow 意思是针对目录或者文件,先拒绝所有ip访问,再放行指定ip。
原文地址:http://blog.51cto.com/12606610/2104592