最近想搭建个论坛玩,找到了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被没有登录和没有权限的用户登录、数据库备份漏洞,这是此处也不再描述,用到的自己查资料吧。