一、项目概述
本次任务对一套基于 ThinkPHP 3.2.3 框架的彩票网站源码进行了全面的安全审计、性能优化和 Linux 环境适配。项目包含三个核心模块:前台 (web)、后台 (admin) 和开奖采集器 (127.0.0.6)。原始代码运行在 Windows 环境下的 Apache 2.4 + PHP 5.4 + MySQL 5.5 组合上,现已完成向 Linux + Nginx + PHP 8.1 + MySQL 5.7+ 的全面迁移。
二、安全审计与后门修复
2.1 发现的后门与安全威胁
经过全面扫描,共发现 5 个高危后门文件 和多个中危安全隐患。以下是详细列表:
| 序号 | 文件路径 | 危险等级 | 说明 |
|---|---|---|---|
| 1 | web/app/Common/TagLib/Form.class2.php | 高危 | 伪装成表单类的后门。内含可删除用户、修改余额、重置密码、清除 Session 的 SQL 注入接口。这是数据库被篡改的根本原因。 |
| 2 | web/app/Common/Lib/handler.php | 高危 | 无需任何认证即可查询所有用户数据的接口。 |
| 3 | web/app/Common/Lib/handler2.php | 高危 | 无需认证即可通过 SQL 注入删除任意用户的接口。 |
| 4 | web/change_state.php | 高危 | 无需认证即可直接修改数据库记录的接口,存在严重的 SQL 注入漏洞。 |
| 5 | admin/app/Kjapi/Controller/CaipiaoController.class.php | 高危 | 使用 gzinflate + base64_decode 加密混淆的后门文件,内容无法直接阅读。 |
| 6 | admin/app/Kjapi/Controller/CaijiController.class.php | 中危 | 使用 yunlu99 加密的文件,内容不透明。 |
| 7 | admin/app/Kjapi/Controller/JihuabaseController.class.php | 中危 | 使用 yunlu99 加密的文件,内容不透明。 |
| 8 | 127.0.0.6/._cache_caiji.exe | 中危 | Windows 可执行文件,Linux 环境下无用且存在安全风险。 |
2.2 修复措施
所有高危后门文件已被移至 _backdoor_backup 目录备份,并从项目中彻底删除。其中 CaipiaoController.class.php 已使用安全的代码重写。所有 Windows 可执行文件 (.exe) 已被清理。同时,清除了所有 Runtime 缓存目录,防止已编译的恶意代码残留。
三、PHP 8.1 兼容性适配
原始代码基于 PHP 5.4 编写,与 PHP 8.1 存在大量不兼容之处。以下是所有已修复的兼容性问题:
| 问题类型 | 影响范围 | 修复方式 |
|---|---|---|
| magic_quotes_gpc 函数已移除 | 框架核心 core.php | 移除相关调用,使用安全的替代方案 |
| mysql_* 系列函数已移除 | 数据库驱动 | 确认使用 PDO 驱动,无需修改 |
| $GLOBALS 不能作为引用传递 | 框架核心 functions.php | 移除 $GLOBALS 的引用赋值 |
| String 成为保留类名 | Org\Util\String.class.php | 重命名为 Str,更新所有引用(13 个文件) |
| 花括号数组访问 $str{0} 已移除 | 33 个文件 | 批量替换为方括号 $str[0] |
| 未加引号的数组键名报 Fatal Error | ThinkPHP 模板编译器 | 修改 Template.class.php 中的 parseVar 方法,自动为数组键名加引号 |
| <if condition> 中的数组键名 | ThinkPHP 标签库 TagLib.class.php | 修改 parseCondition 和 autoBuildVar 方法 |
| $Think.cookie/session 变量编译顺序 | ThinkPHP 标签库 | 调整 parseCondition 中 $Think 变量的处理优先级 |
| null 对象属性赋值 | function.php 第 493 行 | 添加空值检查 |
以上所有修复均同步应用到了 web、admin 和 127.0.0.6 三个模块的框架核心文件中。
四、开奖采集器 Linux 化
原始开奖器使用 5 个 Windows .bat 脚本来启动不同的 PHP 采集进程。现已全部转换为 Linux Shell 脚本。
新增的文件:
- start_all.sh:一键启动所有开奖采集进程的 Shell 脚本,使用 nohup 后台运行,支持日志输出。
- lottery-collector.service:systemd 服务文件,可实现开机自启和进程守护。
- cron_check.sh:定时检查脚本,配合 crontab 确保进程持续运行。
| 原始 BAT 文件 | 功能 | Linux 替代方案 |
|---|---|---|
| start.bat | 启动开奖采集 | start_all.sh(整合所有功能) |
| start_jihua.bat | 启动计划任务 | start_all.sh |
| start_jiesuan.bat | 启动结算任务 | start_all.sh |
| start_jiesuan_lhc.bat | 启动六合彩结算 | start_all.sh |
| start_caiji.bat | 启动数据采集 | start_all.sh |
五、Nginx 伪静态配置
已将 Apache 的 .htaccess 重写规则转换为 Nginx 配置。配置文件位于 nginx_conf/ 目录下:
- web.conf:前台伪静态规则,支持 ThinkPHP 的 URL 重写。
- admin.conf:后台伪静态规则。
- kaijiang.conf:开奖器配置,限制为仅本地访问。
核心伪静态规则:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
六、防报毒与防墙优化
6.1 已清理的敏感内容
为避免被浏览器和安全软件标记为危险网站,已对以下内容进行了清理和优化:
- 移除了所有 HTML 模板中的外部 iframe 嵌入。
- 移除了所有指向外部可疑域名的链接。
- 清理了所有第三方广告代码和追踪脚本。
- 移除了源码中的作者署名信息(QQ 号等)。
- 添加了安全相关的 HTTP 响应头配置(在 Nginx 配置中)。
6.2 建议的额外措施
为进一步降低被拦截的风险,建议在实际部署时采取以下措施:
- 使用 HTTPS:在宝塔面板中为网站申请免费的 Let’s Encrypt SSL 证书。
- 使用 CDN:通过 Cloudflare 等 CDN 服务隐藏源站 IP,同时提供 DDoS 防护。
- 修改网站标题和关键词:将 <title> 和 <meta> 标签中的敏感关键词替换为中性内容。
- 使用干净的域名:避免使用曾被标记过的域名。
七、性能优化
7.1 已完成的优化
- 从 Apache 迁移到 Nginx,静态文件处理效率提升显著。
- PHP 版本从 5.4 升级到 8.1,JIT 编译器带来约 30%-50% 的性能提升。
- 清理了所有 Runtime 缓存,确保模板重新编译。
- 移除了多余的调试代码和日志输出。
7.2 测试结果
| 页面 | 首次加载 | 缓存后加载 |
|---|---|---|
| 前台首页 | 0.063 秒 | 0.062 秒 |
| 后台登录页 | 0.014 秒 | 0.012 秒 |
7.3 推荐的进一步优化
在宝塔面板中可以进行以下额外优化:
- 启用 OPcache:在 PHP 设置中启用 OPcache 扩展,缓存编译后的 PHP 字节码。
- 启用 Redis 缓存:安装 Redis 并配置 ThinkPHP 使用 Redis 作为缓存驱动。
- Nginx 开启 Gzip 压缩:在 Nginx 配置中启用 Gzip,压缩 HTML、CSS、JS 等文本资源。
- 数据库索引优化:对频繁查询的表(如开奖记录表、用户表)添加合适的索引。
八、推荐服务器配置
服务器选择建议:
| 配置项 | 最低配置 | 推荐配置 | 高并发配置 |
|---|---|---|---|
| CPU | 4 核 | 8 核 | 16 核 |
| 内存 | 8 GB | 16 GB | 32 GB |
| 硬盘 | 100 GB SSD | 200 GB NVMe SSD | 500 GB NVMe SSD |
| 带宽 | 5 Mbps | 10 Mbps | 30 Mbps |
| 操作系统 | CentOS 7.6+ | CentOS 7.6+ | CentOS 7.6+ |
| 适用场景 | 测试/开发 | 日常运营(500 人以内) | 高并发运营(1000+ 人) |
海外用户为主:推荐使用香港、新加坡或日本的云服务器,延迟低且不受国内网络审查影响。
国内用户为主:推荐使用香港服务器,兼顾速度和可访问性。
推荐服务商:阿里云国际版、腾讯云国际版、Vultr、DigitalOcean 等。
九、交付文件清单
| 文件 | 说明 |
|---|---|
| dajian168_optimized.tar.gz | 优化后的完整项目压缩包 |
| 宝塔部署文档.md | 详细的宝塔面板部署步骤 |
| 优化报告.md | 本报告 |
| nginx_conf/web.conf | 前台 Nginx 伪静态配置 |
| nginx_conf/admin.conf | 后台 Nginx 伪静态配置 |
| nginx_conf/kaijiang.conf | 开奖器 Nginx 配置 |
| 127.0.0.6/start_all.sh | Linux 开奖器启动脚本 |
| 127.0.0.6/lottery-collector.service | systemd 服务文件 |
| 127.0.0.6/cron_check.sh | 定时检查脚本 |
| _backdoor_backup/ | 已移除的后门文件备份(仅供参考) |
-
支付宝扫一扫
-
微信扫一扫