# 生长激素缺乏预测模型 — 后台检查报告

**检查日期：** 2026-05-24  
**检查范围：** 后台管理系统 + 小程序 API  
**检查方式：** 远程 API 测试（未登录服务器）

---

## 一、系统概览

| 项目 | 值 |
|------|-----|
| 服务器 IP | 101.43.95.130 |
| 后台地址 | http://101.43.95.130/adminghd/login |
| 正式域名 | https://www.ruilaizipj.com |
| 框架 | ThinkPHP 5.0 |
| PHP 版本 | 5.6 |
| 数据库 | MySQL，库名 `ruilai`，charset=`utf8`，表前缀=`t_sys_` |
| Web 服务器 | 系统 Nginx（宝塔 Nginx 已停止） |
| 代码根目录 | /www/wwwroot/code |
| 后台模块 | /www/wwwroot/code/application/adminghd |
| 小程序 API | /www/wwwroot/code/application/app |

---

## 二、功能测试结果

### 2.1 后台管理系统

| 功能 | 接口 | 状态 | 说明 |
|------|------|------|------|
| 登录页面 | GET /adminghd/login | ✅ | HTTP 200 |
| 登录验证 | POST /adminghd/Login/login | ✅ | 账号 13212345678 / 123456 |
| 用户信息 | /adminghd/Menu/getUserInfor | ✅ | 管理员 |
| 微信用户列表 | POST /adminghd/Wechatinfro/getWechatUserList | ✅ | 暂无注册用户 |
| 计算记录列表 | POST /adminghd/Wechatinfro/getWechatRecordList | ✅ | ~75 条记录，15 页 |
| 资讯列表 | POST /adminghd/Wechatset/getWechatRealTimeInfoList | ✅ | 2 条资讯 |
| 记录中文搜索 | POST ...getWechatRecordList (title=诺言) | ❌ | 返回空，编码问题 |

### 2.2 小程序 API

| 功能 | 接口 | 状态 | 说明 |
|------|------|------|------|
| 计算 (Ruilaiwechat) | POST /app/Ruilaiwechat/calculate | ✅ | 计算结果正确 |
| 计算 (Ghdwechat) | POST /app/Ghdwechat/calculate | ⚠️ | 英文名正常，中文名报错 |
| 历史记录查询 | POST /app/Ghdwechat/selectRecordList | ✅ | 正常分页返回 |
| 资讯列表 | POST /app/Ghdwechat/selectRealtimeInfoList | ✅ | 正常返回 |

### 2.3 计算模型验证

**后端公式：**
```
P = exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度) /
    (1 + exp(-5.908 + 0.008×IGF-1 + 2.146×LH + 0.286×子宫厚度))
```

**验证输入：** IGF=250, LH=0.8, 子宫厚度=10

**手算过程：**
```
Y = -5.908 + 0.008×250 + 2.146×0.8 + 0.286×10
  = -5.908 + 2.0 + 1.7168 + 2.86
  = 0.6688

P = e^0.6688 / (1 + e^0.6688)
  = 1.9518 / 2.9518
  = 0.661
```

**API 返回：** `calculate_resutlt: 0.661` — **结果一致，公式实现正确。**

---

## 三、发现的问题

### 问题 1：字符编码错误（严重）

**现象：** Ghdwechat/calculate 接口传入中文姓名时抛出异常：

```
PDOException: SQLSTATE[HY000]: General error: 1366
Incorrect string value: '\xB2\xE2\xCA\xD4\xBB\xBC...' for column 'name' at row 1
```

- 错误文件：`/www/wwwroot/code/application/app/controller/Ghdwechat.php` 第 134 行
- 写入表：`t_sys_wechat_calculate_record`
- 根因分析：数据库 charset 为 `utf8`（3字节UTF-8），`\xB2\xE2\xCA\xD4\xBB\xBC` 是 GBK 编码的"测试患"。说明请求数据以 GBK 编码到达 PHP，但 MySQL 连接期望 UTF-8，导致不兼容。
- 影响范围：小程序端如传入中文姓名，计算将失败
- 注意：Ruilaiwechat/calculate 接口无此问题（可能是不同的编码处理）

**数据库配置（来自异常页面的 dump）：**
```
type: mysql
hostname: 127.0.0.1
database: ruilai
charset: utf8          ← 不是 utf8mb4
prefix: t_sys_
debug: true
```

### 问题 2：后台中文搜索不生效（中等）

**现象：** 在后台计算记录列表中搜索"诺言"（数据库中存在多条该名字的记录），返回空结果。

- 接口：`POST /adminghd/Wechatinfro/getWechatRecordList` (title=诺言)
- 返回：`{"lists":[],"lastPage":0}`
- 根因：与问题1同源 — 搜索关键词和数据库存储的编码不一致

### 问题 3：生产环境 Debug 模式开启（严重-安全）

**现象：** API 出错时抛出完整的 ThinkPHP 异常页面，暴露：

- 完整文件路径（/www/wwwroot/code/...）
- 数据库配置信息（主机、库名、表前缀）
- 完整的 SQL 语句
- 调用堆栈

**配置：** `app_debug: true`（位于 application/config.php）

**风险：** 攻击者可利用这些信息进行精准攻击。

### 问题 4：PHP 5.6 版本过旧（中等）

PHP 5.6 已于 2018 年 12 月 31 日 EOL，不再接收安全更新。存在已知的远程代码执行漏洞（CVE-2019-11043 等）。

---

## 四、当前数据库表使用情况

| 数据表 | 记录数 | 说明 |
|--------|--------|------|
| t_sys_user | 至少 1 条 | 后台管理员 |
| ghd_wechat_user | 0 条 | 无注册用户 |
| t_sys_wechat_calculate_record | ~75 条 | 计算记录（含最新测试数据） |
| t_sys_wechat_real_time_info | 2 条 | 资讯 |

---

## 五、修复建议（按优先级）

| 优先级 | 问题 | 修复方案 |
|--------|------|----------|
| 🔴 高 | Debug 模式泄漏信息 | 修改 `application/config.php`：`app_debug => false` |
| 🔴 高 | 字符编码导致中文报错 | 1) 数据库 charset 改为 `utf8mb4`；2) PHP PDO 连接确保 `set names utf8mb4`；3) Ghdwechat.php 排查编码处理逻辑 |
| 🟡 中 | 中文搜索不生效 | 同编码问题修复后应自动解决 |
| 🟡 中 | PHP 5.6 EOL | 升级到 PHP 7.4+（需验证 ThinkPHP 5.0 兼容性） |
| 🟢 低 | 数据库 charset=utf8 | 改为 `utf8mb4` 以支持完整 Unicode（含 emoji 等 4 字节字符） |

---

## 六、未检查项目

以下项目需要登录服务器后才能检查：

- [ ] Nginx 配置文件内容确认
- [ ] PHP-FPM 运行状态和配置
- [ ] MySQL 数据库完整表结构
- [ ] 日志文件（应用日志、错误日志）
- [ ] 磁盘空间和服务器资源
- [ ] 定时任务 / 数据备份
- [ ] SSL 证书有效期
- [ ] 小程序源码（szjs/ 目录）
