Discuz! 部署前必须关闭默认危险配置:删除 install/ 目录,设 config_global.php 为 644、data/ 为 755,禁用 allow_url_fopen/include,启用登录限制、防采集、新用户发帖审核,禁用高危 PHP 函数,Nginx 禁止访问敏感路径。

Discuz! 部署前必须关闭的默认危险配置
Discuz! 安装包自带的 install/ 目录、data/config/config_global.php 可写权限、以及 source/install/ 等残留安装文件,是线上环境最常被利用的入口。上线前不清理,等于给攻击者留了后门。
- 删掉整个
install/目录(不是改名,不是 .htaccess 禁止访问) -
data/config/目录权限设为755,config_global.php设为644(确保 Web 进程不可写) - 检查
uc_server/data/config.inc.php是否也设为只读;UCenter 配置泄露会直接导致全站用户凭据失控 - 禁用 PHP 的
allow_url_fopen和allow_url_include(Discuz! 旧版存在远程文件包含利用链)
必须启用的 Discuz! 内置安全模块
Discuz! X3.5+ 提供了可勾选的安全开关,但默认不全开。光靠 WAF 或 Nginx 规则不够,核心防御得落在应用层。
- 后台 → 全局 → 安全设置 → 启用「登录失败次数限制」和「IP 锁定时间」,防止暴力爆破
admin.php - 开启「防采集」:勾选「禁止未授权的外部脚本调用接口」,能阻断大量自动化灌水机器人
- 「论坛相关」→「发帖相关」中,把「新用户发帖审核」设为「是」,并配合「用户组» 新注册用户» 发帖数限制=0」,避免注册机秒发广告帖
- 关闭「允许游客浏览」(除非业务强需求),游客无 session 绑定,极易被用于 CSRF 或 XSS 传播
PHP 运行时必须加固的底层参数
Discuz! 是基于 PHP 的老架构,很多安全问题出在 PHP 配置松散,而非程序本身。尤其注意 open_basedir 和 disable_functions 的实际生效情况。
- 在
php.ini中强制禁用高危函数:disable_functions = system,exec,passthru,shell_exec,proc_open,popen,pcntl_exec - 设置
open_basedir严格限定到网站根目录,例如:/www/wwwroot/bbs.example.com/:/tmp/(注意末尾冒号和/tmp/必须显式加入,否则附件上传失败) -
expose_php = Off(隐藏 PHP 版本号,减少指纹暴露) - 若用 PHP-FPM,确保
security.limit_extensions = .php,防止上传.php.jpg绕过解析
Nginx / Apache 必加的请求层防护规则
Discuz! 的 URL 路由和静态资源路径固定,用 Web 服务器规则拦截异常请求,比等 PHP 解析后再过滤更高效、更早止损。
立即学习“PHP免费学习笔记(深入)”;
- Nginx 下禁止直接访问敏感路径:
location ~ ^/(config|data|uc_server/data|source|install) { deny all; } - 拦截常见攻击特征:
location ~ \.(php\.jpg|php\.png|phtml|php3|php4|php5|php6|php7|php8|phar|phps)$ { return 403; } - 限制
forum.php和home.php的 GET 参数长度(Discuz! 常见 SQL 注入点在mod和op参数):if ($args ~ "(union\s+select|sleep\()") { return 403; }(仅作辅助,不能替代参数绑定) - Apache 用户请确认
.htaccess已启用,并在根目录部署 Discuz! 自带的.htaccess(含重写和基础防护)
uc_server 配置文件权限、data/ 目录写入控制、以及 PHP 的 disable_functions 是否真实生效——这三处漏掉任意一个,其他所有配置都可能形同虚设。











