访问控制Directory
需求案例:可以让公司内网可以访问到网站某文件夹。不需要其他模块支持,在站点的文件的语句外最前面设置。
Order deny, allow
deny from all
allow from 127.0.0.1
#1.看Order后面,deny 和allow哪个在前先执行哪个。
#2.不管deny和allow哪个在前,所有语句都会执行。
<Directory /data/wwwroot/www.123.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
<Directory /data/wwwroot/www.123.com/>
... ...
</Directory>
#该案例,仅仅支持主机访问
可以通过win浏览器访问,或者curl -x源IP 访问admin文件夹发现为403
访问控制FilesMatch
首先定义一个Directory,在该语句内设置FilesMatch,限制某些文件
<Directory /data/wwwroot/www.123.com>
<FilesMatch "admin.php(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</FilesMatch>
</Directory>
禁止PHP解析
在可上传文件的目录下禁止解析PHP,为了避免上传的PHP文件有木马,所以禁止该目录下面的访问解析PHP。一般可写目录、静态文件存放的目录内是不允许存放PHP。
<Directory /data/wwwroot/www.123.com/upload>
php_admin_flag engine off #本来加这一行就可以禁止upload下解析php
<FilesMatch (.*).php(.*)> #加上该模块是为了放置直接访问下载该文件夹下PHP源码
Order allow,deny
Deny from all
</FilesMatch>
</Directory>
限制user_agent
user_agent可以理解为浏览器标识。防止CC攻击,使大量肉机同时访问某站点,造成拥堵。CC攻击的规律为所有的user_agent都是一致的,且访问频率快,访问地址相同。
使用rewrite模块
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
NC不分大小写 OR或 不加OR为并且
curl -A 指定user_agent -e源IP -x指定host -I仅仅查看状态码