Discuz 是康盛公司推出的一套通用社群論壇軟體系統,使用者可以在不需要任何程式設計基礎上,透過簡單的設定和安裝,在網際網路上搭建起具有完善功能、高負載、高定製的論壇。 Discuz 是一個經過完善設計,適用於各種伺服器環境的高效論壇系統解決方案。

由於 Discuz 的安裝和管理極其方便,許多企業管理員並未對他的安全風險有相應的瞭解;Discuz 作為開源軟體,歷史上被發現若干安全漏洞,極容易導致伺服器被入侵。

出於工作需要,筆者經常會接觸到公司的各類 Discuz 論壇,對 Discuz 的安全問題十分關注,這裡給大家分享一些關於 discuz 論壇防護的方案,希望能給廣大企業使用者提供幫助。

Discuz 論壇管理大致分為伺服器安全加固、網站安全加固、日常管理三個方面的內容,以下是詳細的實施方案可供參考。

伺服器安全加固

確保網站安全首先要保證伺服器各項元件的安全,如 discuz 伺服器的一般元件有 Apache 、 php 、 mysql 等,確保這些第三方軟體安全有如下一些原則:

1 、許可權最小化

a) Webserver 及資料庫服務均以非 root 許可權啟動;

b) 檔案屬主與 webserver 程式屬主不同 (一般設定檔案的屬主為 root)

c) 確保 discuz 網站的目錄和檔案許可權最小化。

目錄許可權除必須為 777 的目錄外,其他目錄許可權須設定為 755
檔案許可權除必須為 777 的檔案外,其他檔案許可權須設定為 644

d) 資料庫與 webserver 不在同一臺機器上

e) 可寫的目錄沒有執行指令碼許可權,可執行指令碼許可權的目錄不可寫。

常見可寫目錄為:./config 、./data 、./uc_client/data/、./uc_server/data/

常見不可解析 php 的目錄為:./data/、 diy 、 template 、 attachment 、./install/images 、
./uc_server/data 、 forumdata 、 images

在 apache 中配置不允許執行 php 許可權如下:
<directory "="" discuz="" data="">
    php_flag engine off

        Order allow,deny
        Deny from all


f) 控制指令碼僅允許訪問網站檔案

在 php.ini 中配置 open_basedir 項為網站目錄

2 、預設選項需要加固

a) 刪除預設 webserver 頁面

如 apache 需要刪除 icons 和 manual 兩個目錄

b) 停用 php 危險函式

在 php.ini 配置:
disable_functions=exec,popen,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open

3 、敏感資訊不顯示
a) 關閉 webserver 的目錄瀏覽功能

Apache 配置檔案中的目錄配置項的 「Indexes」 刪除或者改為 「-Indexes」

b) 關閉 php 的錯誤訊息顯示

Php 配置:display_errors = Off

4 、開啟日誌記錄
a) 開啟 webserver 的日誌記錄功能

CustomLog /www/logs/access_log common

b) 開啟 php 的錯誤日誌記錄功能

log_errors = On
error_log = D:/usr/local/apache2/logs/php_error.log
注意:該檔案必須允許 apache 使用者的和組具有寫的許可權

5 、實施 ip 策略

a) 資料庫僅開放在內網

b) 不允許任意 ip 連線資料庫

c) Iptables 禁止所有的非法連線

d) 管理目錄僅允許內網訪問

網站安全加固

伺服器足夠安全只是網站安全的前提,確保網站安全大致有如下措施:

1 、賬戶安全

a) 使用者密碼需要加密儲存
b) 使用者密碼需要採用密文的形式在網路上傳輸

2 、後臺管理

a) 後臺管理介面需要使用雙因子確保管理員的合法性。常見的因子如 (ip 策略、 token 、使用者密碼) 等。

3 、業務配置

a) 針對 discuz 業務特性,在安裝的時候會刪除不必要的外掛

api 目錄 (外部介面) 裡的以下功能如果不使用可以刪除
Db 目錄 ---> UCenter 資料庫備份介面 google---google 引擎使用
Javascript 目錄 ---> 資料和廣告的 js 呼叫
Trade 目錄 ---> 線上支付介面
Manyou 目錄 ---> 漫遊和雲平臺使用

b) 關閉論壇的個人空間,防止惡意釣魚,欺詐。

Discuz! X1.5 關閉個人空間方式:
修改檔案 source/module/home/home_space.php, 搜尋如下程式碼:
$do=(!empty($_GET['do'])&&in_array($_GET['do'], $dos))?$_GET['do']:'index';
下面新增如下程式碼:
if(in_array($do, array('home', 'doing', 'blog', 'album', 'share', 'wall'))) {
showmessage('抱歉,家園功能尚未開啟', 'forum.php');
}
Discuz! X2 關閉個人空間方式:
後臺-> 全域性-> 站點功能-> 功能模組 (是否開啟家園功能,點否即可關閉)

c) 檢查 crossdomain.xml 檔案,限制到特定的域名或者將此檔案刪除。

d) 遵循 Discuz 常見安全配置

1 、 forumfounders= '1'
論壇創始人 UID, 建議只有一個創始人。
2 、論壇防禦級別配置 attackevasive = 0 (由於會影響使用者,這裡預設是 0,如果遭到 攻擊,可以自行嘗試 1,2,4,8 的配置)
論壇防禦級別,可防止大量的非正常請求造成的拒絕服務攻擊。
3 、 urlxssdefend = 1
論壇訪問頁面防禦開關。
4 、 admincp['forcesecques'] = 1
管理人員必須設定安全提問才能進入系統設定,0=否,1=是 【安全】 。
5 、 admincp['checkip'] = 1
後臺管理操作是否驗證管理員的 IP,1=是 【安全】,0=否。
6 、 admincp['tpledit'] = 0(這項針對 Discuz! 7.2 的安全配置)
是否允許線上編輯論壇模板 1=是 0=否 【安全】 。
7 、 admincp['runquery'] = 0
是否允許後臺執行 SQL 語句 1=是,0=否 【安全】 。
8 、 admincp['dbimport'] = 0
是否允許後臺恢復論壇資料 1=是 0=否 【安全】 。

日常管理
1 、 所有的第三方軟體均需要使用最新版本,確保安全。

2 、 關注所用到的第三方軟體的安全資訊,及時更新補丁或升級。如 dz 論壇容易出現 nginx 的解析漏洞

在 PHP 的配置檔案 php.ini 中配置 cgi.fix_pathinfo = 0,防止 nginx 檔案解析漏洞

3 、 關注官方釋出的安全資訊。

4 、 dz 論壇統一管理。統一化的管理可以高效的對 discuz 論壇進行更新、維護,避免出現各個管理員對安全資訊掌握不一致的問題。

5 、 增加 dz 的網站風險檢測系統,24 掃描 dz 站點,及時掌握 dz 的安全狀況

6 、 增加漏洞收集渠道,更好的掌握自身產品的安全漏洞。

作為普通網站的管理人員,通常需要遵循伺服器安全加固中的 1,2,3,4 四點、網站安全加固的 1,2 兩點、及日常管理的 1,2,3 三點用於確保網站的安全性。

中小型企業若使用到 discuz 論壇可以參考網站安全加固的業務配置選項,更好的防禦 discuz 論壇。