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 论坛。