1. 程式人生 > 實用技巧 >discuz 在win搭建問題解決,防偽圖片攻擊漏洞

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