• 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被没有登录和没有权限的用户登录、数据库备份漏洞,这里此处也不再描述,用到的自己查资料吧。

  • 相关阅读:
    Map集合的四种遍历方式
    测试框架:使用SONAR分析代码质量
    什么是蓝绿发布
    linux命令(mac)
    TestNG.xml大全
    Mac端git新增项目
    JavascriptExecutor的UI自动化实战
    git命令及Maven命令
    UI自动化常用代码
    USACO 1.3 Ski Course Design
  • 原文地址:https://www.cnblogs.com/jying/p/14072689.html
Copyright © 2020-2023  润新知