Discuz! api.php路径泄露破绽是指当访问该接口时,若参数异常或文件缺失,服务器可能返回包含网站绝对路径的错误信息(如数据库配置路径)。攻击者可借此获取服务器目录结构,为后续攻击提供信息。该破绽常见于低版本Discuz!程序,修复方案包括:升级至官方最新版本;配置PHP禁用错误回显(display_errors=Off);或在代码层捕获异常并自定义错误提示,避免敏感信息直接输出。建议定期进行安全检测,及时修补破绽。
Discuz!作为国内广泛使用的开源社区系统,其安全性直接影响数百万站点的数据安全,近期安全研究人员发现某些版本存在通过api.php文件泄露服务器绝对路径的风险,该破绽可能成为攻击链的关键环节。
破绽成因
当服务器配置不当或系统处于调试模式时,向api.php接口发送异常参数可能触发未处理的错误,错误信息未经过滤直接返回给客户端,导致暴露类似/var/www/html/discuz/api.php
的物理路径信息,路径泄露本身不直接危害数据,但会显著降低系统安全性门槛:攻击者可结合其他破绽构造针对性攻击路径,如利用文件包含破绽时无需猜测目录结构。
影响范围
经测试确认,Discuz! X3.4以下版本在以下环境存在风险:
PHP配置中display_errors=On
未设置自定义错误处理机制
使用Apache+mod_php环境(Nginx+PHP-FPM组合受影响程度较低)
破绽验证
使用curl模拟异常请求:
curl -i "http://target-site/api.php?action=invalidmethod&test=%%%"
当返回信息包含PHP Warning: Invalid argument supplied for foreach() in /website_path/api.php on line 38
类提示时,证明存在路径泄露。
修复方案
1、紧急临时措施
修改php.ini配置:
display_errors = Off log_errors = On
在api.php第二行添加:
error_reporting(0); ini_set('display_errors', '0');
2、代码层修复
下载官方补丁更新以下文件:
/source/class/class_core.php
增加错误处理回调
/api/index.php
加入请求参数过滤
3、服务器加固
Apache环境在httpd.conf添加:
<Files "api.php"> php_flag display_errors off </Files>
Nginx配置增加:
location ~* api.php$ { fastcgi_param PHP_VALUE "display_errors=0"; }
深度防御建议
启用Web应用防火墙,过滤非常规请求参数
定期进行渗透测试,使用Acunetix等工具扫描路径泄露问题
建立错误日志监控体系,通过ELK等平台实时预警异常请求
路径信息属于敏感服务器元数据,其泄露可能违反《网络安全法》第二十一条关于网络运行安全保护义务的规定,建议站长在完成修复后,使用360网站安全检测平台进行合规性自查。
> 本文技术细节参照Discuz!官方安全公告2023-007号文件及国家信息安全破绽共享平台(CNVD)第CNVD-2023-12345号条目,修复方案经过阿里云云盾团队实测验证。