discuz 在win搭建问题解决,防伪图片攻击漏洞

最近想搭建个论坛玩,找到了discuz,这玩意是php的,可是我不会php,没关系,反正我是搭建又不需要开发,discuz经过这么多年发展,使用挺方便的,安装完后有清晰的后台管理,完全不用操心功能上的东西。

虽然安装discuz基本是一键完成的事,但因为我是win服务器,加上对php完全没接触过,所以还是走了不少弯路。

运行discuz是需要有php环境的,这一块难度也不大,下载php新版本后解压运行即可,虽然php新版本在修改php.ini上有些字段跟网上的资料有出入,但基本能对应上相关的单词,配置php启动并访问首个phpinfo信息页面没什么难点。运行php-cgi语句如下:

php-cgi.exe -b 127.0.0.1:9000 -c php.ini

在discuz服务搭建选择上首选了IIS,安装IIS就不需要我重述了,但在IIS上运行php始终无法成功,最终发现是因为配置php映射的原因。

 

无图害死人,网上查的资料说要改“处理程序映射”,所以直接改了站点内的处理程序映射,但就是不行,最终机缘巧合改了IIS根下的“处理程序映射”,立刻好了。。

但是IIS里的80端口不能与nginx下的80端口共存,所以最终只能舍IIS改用nginx(因为nginx可以并存多个80端口的站点,而且已经在nginx下占用了80端口)。

nginx配置php其实也很简单,默认配置文档里有现成的配置说明,只需要把以下内容前的注释#号去掉即可访问php类型文件。当然需要自己绑定location / 到自己的php项目路径下,基本配置如下:

        location / {
            root   C:/web/php;
            index  index.php;
        }

        location ~ .php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

这样基本访问没什么问题了,但是会暴露一个php的漏洞,就是在浏览器路径图片上加/*.php都会去执行php解析,如果该图片是php类型文件然后伪造成图片后缀则会造成php对服务器的攻击。将php.ini中的配置改为 cgi.fix_pathinfo = 0的方法对于win服务器来说是不现实的,早期的资料基本都用这种方法,但我用的nginx版本为1.13.8,配置cgi.fix_pathinfo=0后所有相对地址的文件都无法访问了,很显然这是不对的,必须把cgi.fix_pathinfo设为1。

然后网上还有一种解决思路是重写返回,用什么rewrite,我没去尝试,因为我发现了另一个更简洁的配置方式,如下:

        location / {
            root   C:/web/php;
            index  index.php;
        }

       location ~* .*.php($|/) {
            if ($request_filename ~* (.*).php) {
              set $php_url $1;  
            }
            if (!-e $php_url.php) {
               return 403;
            }

            root           C:/web/php;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
            include      fastcgi.conf;
       }

具体原理没去深究,但这个确实解决了此漏洞,以上有个很重要的配置:include  fastcgi.conf; 该配置表示指向fastcgi.conf文件,而该文件是现在的nginx自带的,跟nginx.conf在同一个文件夹下。

这样discuz就搭建完成了。

关于discuz还是一些其他漏洞,比如防admin被没有登录和没有权限的用户登录、数据库备份漏洞,这里此处也不再描述,用到的自己查资料吧。

原文地址:https://www.cnblogs.com/jying/p/14072689.html