迅速修复nginx fcgi方式配置漏洞
2010年5月20日,80后爆nginx 0day漏洞,上传图片可入侵100万服务器。目前已经有好几个大型互联网公司被入侵了,公司类型包括电子商务、游戏、SNS等。
现在看来,这个漏洞不属于Nginx的漏洞. 是配置的问题, 现在到处都在说是Nginx的Bug,关闭fix_pathinfo(默认是开启的).就可以解决
临时修复方法如下,可3选其一。
1、设置php.ini的cgi.fix_pathinfo为0,重启php。最方便,但修改设置的影响需要自己评估。
2、给nginx的vhost配置添加如下内容,重启nginx。vhost较少的情况下也很方便。
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}
3、禁止上传目录解释PHP程序。不需要动webserver,如果vhost和服务器较多,短期内难度急剧上升;建议在vhost和服务器较少的情况下采用。
njava使用了方法2来修复njava的nginx 0day漏洞
bear@njava:~$ vi /etc/nginx/sites-available/njava location ~ \.php$ { fastcgi_pass unix:/data/tmp/php-cgi.sock; fastcgi_index index.php; set $path_info "/"; //对$fastcgi_script_name的格式做正则判断,如果是 a.jpg/xxx.jpg这样的类型就返回403 if ( $fastcgi_script_name ~ \..*\/.*php ) { return 403; } set $real_script_name $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { set $real_script_name $1; set $path_info $2; } fastcgi_param SCRIPT_FILENAME /var/www/njava/$real_script_name; fastcgi_param script_name $real_script_name; fastcgi_param path_info $path_info; include /etc/nginx/fastcgi_params; }