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被沒有登入和沒有許可權的使用者登入、資料庫備份漏洞,這是此處也不再描述,用到的自己查資料吧。