linux 取消目录php脚本执行权限的方法和步骤
假设取消web 目录uploads的php脚本执行权限, 网站根目录是/var/www/blog。
针对 apache :
<Directory “/var/www/blog/data/”>
<FilesMatch “.(php|asp|jsp)$”>
Order allow,deny
Deny from all
</FilesMatch>
</Directory>
针对 nginx :
location ~ ^/upload/.*\.(php|php5)$
{
deny all;
}
简单写个php文件测试如下:
Forbidden
You don’t have permission to access /uploads/phpinfo.php on this server.------------
这些配置表面上看起来是没什么问题的,确实在windows下可以这么说。
但是*nux就不同了,大家都是知道的*nux操作系统是区分大小写的,这里如果换成大写后缀名*.phP一类就bypasss了这里我说下我个人的解决方法:
复制代码 代码如下:<Directory "/var/www/upload">
<FilesMatch "(?i:.php)"> //?是尽可能多的匹配.php的字符串,i是不区分大小写,然后冒号后面跟上正则表达式
Order Allow,Deny
Deny from all
</FilesMatch>
</Directory>另外一种方法,这个我们都用过
复制代码 代码如下:<Directory "/var/www/upload">
php_admin_flag engine off
</Directory>
2、多个目录去掉PHP执行权限
location ~ /(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}
将attachments、upload这二个目录的PHP执行权限去掉。附上一个完整的虚拟主机的例子供参考:
server
{
listen 80;
server_name bbs.vpser.net;
index index.html index.htm index.php;
root /home/wwwroot/bbs.vpser.net;include discuz.conf;
location ~ /(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}
location ~ .*\.(php|php5)?$
{
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
}
access_log off;
}添加完执行:/etc/init.d/nginx reload 生效