一、前期准备:搭建检测环境并部署源码
检测前需先准备本地或虚拟服务器,避免直接在生产环境操作。
1. 搭建基础环境
- 系统:Windows用WampServer64bit 3.3.0(https://sourceforge.net/projects/wampserver/files/WampServer%203/WampServer%203.3.0/wampserver3.3.0_x64.exe/download),Linux用Ubuntu22.04LTS,PHP版本强制用PHP7.4-8.1(EyouCMS稳定版适配)
- 工具:Git Bash(https://git-scm.com/downloads)、Notepad++(https://notepad-plus-plus.org/downloads/v8.6/)、OWASP ZAP(https://github.com/zaproxy/zaproxy/releases/download/v2.14.0/ZAP_2_14_0_windows.exe)、代码审计工具Seay源代码审计系统(PHP专用,https://github.com/f1tz/Seay-Source-Code-Audit-System/releases/download/v3.2/SeaySrc3.2.7z)
2. 下载并部署EyouCMS
不要直接下载压缩包二次编译的版本,从官方仓库拉取最新稳定版,Git命令如下:
```
拉取稳定分支代码
git clone -b stable https://gitee.com/eyoucms/eyoucms.git
本地Linux/WampServer环境配置虚拟域名后,访问对应域名/install/index.php按提示完成安装
安装后需立即删除install目录,否则是高危入口
```
二、Seay本地静态审计:扫出90%以上基础漏洞
Seay针对PHP审计优化,无需联网,结果精准。
1. 配置审计系统
- 解压SeaySrc3.2.7z到任意非中文目录,右键管理员权限打开SeaySrc.exe
- 点击菜单栏「系统配置」→「PHP环境路径」,选择WampServer/Ubuntu的PHP7.4-8.1可执行文件(Windows选php.exe,Linux选/usr/bin/php7.4)
- 点击「新建项目」,项目名称填eyoucms_audit,项目路径填刚才拉取的eyoucms根目录
2. 执行全量审计并筛选结果
- 点击「开始审计」,等待5-10分钟(取决于硬件配置)
- 审计完成后,左侧「漏洞列表」重点筛选高危、中危:SQL注入、XSS跨站、文件包含、文件上传漏洞,低危/信息泄露漏洞可选后续优化
3. 手动验证关键漏洞
Seay可能误报,挑2个最常见的手动排查:

SQL注入验证示例:比如筛选到application/api/controller/Index.php有SQL拼接,找到对应代码行:
```php
// 假设原漏洞代码
$id = input('param.id');
$list = db('article')->where("id = $id")->select();
```
用Notepad++替换为参数绑定:
```php
// 修复后代码
$id = input('param.id/d'); // /d强制转换为数字,再加一层参数绑定
$list = db('article')->where('id', $id)->select();
```
文件上传验证示例:检查application/admin/controller/Upload.php,若允许.php/.php5等后缀,修改配置文件application/extra/upload.php的allow_exts数组,仅保留图片/文档类后缀:
```php
// 完整可复制的修复版allow_exts
'allow_exts' => ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx'],
```
三、OWASP ZAP动态审计:模拟真实黑客攻击扫交互漏洞
静态审计扫不出的跨站请求伪造(CSRF)、越权访问等,需动态审计补漏。
1. 配置ZAP代理
- 打开OWASP ZAP,首次启动点击「No, I don't want to persist」
- 点击菜单栏「Tools」→「Options」→「Local Proxies」,默认监听地址127.0.0.1:8080,点击「OK」
- Chrome浏览器安装Proxy SwitchyOmega插件(https://chromewebstore.google.com/detail/proxy-switchyomega/padekgcemlokbadohgkifijomclgjgifom),新建「ZAP」情景模式:HTTP代理127.0.0.1,端口8080,点击「应用选项」并切换到ZAP模式
2. 执行自动扫描
- 在ZAP顶部「URL to attack」输入框填刚才配置的EyouCMS虚拟域名,点击「Attack」
- 等待15-20分钟,自动完成Spider(蜘蛛爬取全站)、Active Scan(主动攻击)、Passive Scan(被动检测)
3. 分析并修复交互漏洞
- 左侧「Alerts」重点看High、Medium:
- CSRF漏洞:EyouCMS默认开启了CSRF令牌,但可能部分接口没加。修复方法是在对应控制器方法前添加中间件,或手动验证:
```php
// 手动验证CSRF令牌(通用方法)
if (!request()->checkToken()) {
$this->error('非法请求');
}
```
- 越权访问漏洞:比如普通用户能访问后台admin.php,检查application/admin/controller/Base.php,确保所有后台控制器继承该基类,且基类的initialize方法验证登录状态和角色权限
四、收尾:加固部署与定期检测
1. 生产环境加固部署
- 严格删除install、templet/backup(若不使用模板备份)、public/static/admin/js/ueditor/php(若不使用富文本编辑器)等不必要目录
- 修改默认后台路径:在application/route.php添加以下代码(把/admin换成你自定义的复杂路径,比如/eyoucms_admin_8822):
```php
// 完整可复制的后台路径修改
Route::rule('eyoucms_admin_8822', 'admin/Index/index');
Route::rule('eyoucms_admin_8822/:controller', 'admin/:controller/index');
Route::rule('eyoucms_admin_8822/:controller/:action', 'admin/:controller/:action');
// 隐藏原admin入口
Route::rule('admin', 'index/Index/error');
```
- 修改数据库默认用户名密码,不要用root/123456
- 开启PHP的disable_functions,在php.ini中添加:
```
disable_functions = exec,passthru,system,shell_exec,popen,proc_open,show_source,highlight_file,dl,eval,assert,create_function
```
2. 定期检测机制
- 每月拉取EyouCMS官方Gitee仓库的stable分支最新代码,对比修改过的文件是否有官方修复的漏洞(用Git命令git diff stable origin/stable查看差异)
- 每季度用Seay和OWASP ZAP重新检测一次