Discuz 站点防挂马不能单靠开启某个验证功能,需要结合文件权限、安全模块、云端防护和定期排查多层措施。市面上流传的「安全中心验证」并非单一开关,需通过综合配置实现防护。
先说结论:Discuz 没有名为「安全中心验证」的单一开关,防挂马需要清理残留安装文件、开启后台安全模块、配置服务器权限,并配合验证码插件或云端防护。
- 先判断:确认站点是否已被挂马,检查百度快照是否跳转异常、后台文件校验是否有文件被修改
- 优先做:删除 install 目录、设置配置文件只读、开启登录限制和防采集、启用验证码
- 再验证:通过文件校验工具复查、观察百度收录是否正常、监控服务器日志
快速处理思路
Discuz 防挂马没有一条命令能解决,需要按以下顺序处理:
1. 进后台「工具」→「文件校验」,查看最近被修改的 PHP 文件
2. 删除网站根目录下的 install/ 目录(不是改名,是彻底删除)
3. 设置 data/config/config_global.php 权限为 644,data/ 目录权限为 755
4. 后台「全局」→「安全设置」中开启登录失败次数限制、IP 锁定、防采集
5. 安装可靠的验证码插件替代已停止服务的防水墙,X2 版本需先升级文件
6. 修改 FTP 密码、服务器密码、网站后台密码
为什么会这样
Discuz 被挂马通常是因为上线前没有清理安装包残留文件。install/ 目录、source/install/ 等残留安装文件是线上环境最常被利用的入口,不清理等于给攻击者留了后门。
挂马的常见表现是在百度中输入自己网址,出现被收录的帖子链接,点击后跳转到博彩网站等异常页面。这是因为恶意代码被植入到 PHP 文件中,通过@include($_SERVER['DOCUMENT_ROOT']...) 这类代码加载非法上传的文件。
Discuz 本身提供了一些安全模块,但默认不全开。光靠 WAF 或 Nginx 规则不够,核心防御得落在应用层配置上。
分步处理
第一步:排查已挂马文件
进入 Discuz 后台,找到「工具」→「文件校验」,查看最近有哪些 PHP 文件被修改。排查网站源文件的 PHP 文件,查看是否有出现 IP 地址或异常网站地址(上面跳转的网站),如果有就删除。
重点检查是否有如下代码:
@include($_SERVER['DOCUMENT_ROOT'].pack('H*','2F646174612F6176617461722F30'))如果有这段代码,删除它并检查对应路径下是否存在被非法上传的文件。
第二步:清理危险配置与权限
删除整个 install/ 目录,确保 source/install/ 等残留安装文件也被清理。通过 SSH 连接服务器,执行以下命令设置权限:
cd /www/wwwroot/your_site chmod -R 755 data/ chmod 644 data/config/config_global.php chown -R www:www .
检查 uc_server/data/config.inc.php 是否也设为只读,UCenter 配置泄露会直接导致全站用户凭据失控。
第三步:开启内置安全模块
进入后台「全局」→「安全设置」:
- 启用「登录失败次数限制」和「IP 锁定时间」,防止暴力爆破 admin.php
- 开启「防采集」:勾选「禁止未授权的外部脚本调用接口」,阻断自动化灌水机器人
- 「论坛相关」→「发帖相关」中,把「新用户发帖审核」设为「是」
- 配合「用户组」→「新注册用户」→「发帖数限制=0」,避免注册机秒发广告帖
除非业务强需求,否则关闭「允许游客浏览」,游客无 session 绑定,极易被用于 CSRF 或 XSS 传播。
第四步:配置验证码与云端防护
注意:Discuz 原版腾讯防水墙服务目前已停止新用户接入。建议前往 Discuz 应用中心安装第三方验证码插件(如极验、ReCaptcha 等)。
若仍使用旧版防水墙,需确认服务状态。防护功能包括实时过滤违规主题和回帖,将被拦截信息自动转入回收站,无需站长手工删帖。系统依托安全中心的数据分析能力,结合 AI 及大数据技术实现识别,提供验证码、IP/设备画像等防护功能。
第五步:服务器层安全加固
挂马问题解决后,更改 FTP 密码、服务器密码、网站密码,尽量设置复杂一些。建议修改部分默认端口,如 SSH、宝塔面板默认端口,设置新端口后将默认端口在服务器安全策略、安全组中全部设置禁止访问。
关闭 MySQL 默认的 3306 端口对外暴露,若数据库与 Web 服务在同一台机器,应禁止外部访问 3306 端口,仅允许本地连接。
在 Nginx 配置中禁止特定目录执行 PHP,防止上传木马被执行。示例配置如下:
location ~* ^/(data|upload|static)/.*\.php$ {
deny all;
return 403;
}怎么验证是否生效
1. 再次进入后台「工具」→「文件校验」,确认没有新的文件被修改
2. 在百度中搜索自己网站,观察收录的帖子链接点击后是否还跳转异常页面
3. 查看服务器日志,检查是否有大量错误访问链接或国外 IP 扫描
4. 定期检查邮件发送日志(如果开启了邮箱验证),有助于及时发现发送失败问题
5. 使用宝塔等面板的防火墙扫描功能扫描目录,人工排查误报
常见坑
1. install/ 目录只改名或用.htaccess 禁止访问是不够的,必须彻底删除
2. 宝塔扫描结果很多是误报,需要人工排查,别错把缓存目录文件当做异常文件
3. 已经百度收录的异常页面一般很难处理,可以举报那个收录的页面,或在问题处理后去百度资源平台批量提交链接 404
4. 被挂马不仅要扫描网站目录,还要扫描其它目录,服务器被攻破后攻击者会把文件复制到其它地方
5. 有时异常文件是加密的,可根据加密文件的特征代码将加密内容解密,可能会发现更多特征代码如登录地址、密码、账号等
6. 有人把木马伪装成图片上传,可以在 Nginx 里禁止某些目录运行 PHP
7. 设置拦截 IP 或手动设置 IP 黑名单时,要注意获取真实 IP
8. 确保网站的「运行模式」不是「关闭」,否则邮件验证等功能不会发送
参考来源
- Discuz 官方安全设置文档
- 服务器安全加固最佳实践
- Nginx 安全配置指南