# 圣巧依 / 酷冰甲 CMS — 完整性 · 安全性审计 & 后台美化报告

- 本地：`G:\www\phpEnv\www\圣巧依新的`
- 远端：https://st-joyapparel.com/ （后台 `admin`）
- 技术栈：原生 PHP MVC（自研路由/View/Model），MySQL / 文件双驱动
- 说明：项目为 PHP 服务端渲染，与 Nuxt/Nuxt-UI 无关，本次未引入前端框架。

---

## 一、完整性检查（结论：结构完整，运行正常）

| 项目 | 结果 |
|---|---|
| 路由分发 `App::run` / `dispatch` | 正常，前台/后台/CRM/PSI 分区清晰 |
| 自愈安装 `Installer::upgrade` | 正常，缺表自动补齐（本地空库首访即建表） |
| 本地启动（PHP 8.1 内置服务器） | 成功，`/admin/login` HTTP 200 |
| 登录后仪表盘 `/admin` | 成功渲染（22KB），**无 PHP 报错/警告** |
| 静态资源 `serveFile` | 正常，且有目录穿越防护（realpath 前缀校验） |
| 权限模型 | 完善：`admin_can` 能力位 + `super_admin/admin/user` 角色 + CRM/PSI 子系统角色 |

> 已核验：登录 → 仪表盘链路可用，各导航项 SVG 图标正确输出（共 40 个内联 SVG）。

---

## 二、安全性审计

### 已有的良好实践（保持）
- **SQL 注入**：`Core\Model` 全量使用 PDO 预处理，未见拼接。✅
- **CSRF**：`csrf_field()` / `csrf_check()`（`hash_equals` 常量时间比较）。✅
- **密码**：`password_hash` / `password_verify`。✅
- **会话加固**：`HttpOnly` + `SameSite=Lax`，HTTPS 下 `Secure`，登录后 `session_regenerate_id`。✅
- **登录限流**：失败次数限制，防暴力破解。✅
- **安全响应头**：`apply_security_headers()`（含 CSP、X-Frame-Options 等）。✅
- **XSS 输出**：视图统一 `e()` 转义。✅
- **生产后门**：`allow_config_fallback=false`，已封堵配置文件兜底账号。✅

### 🔴 高危（需你在服务器侧尽快处理）
1. **远端默认密码 `admin888` 仍可登录**
   - 配置注释已注明"远端已实测默认密码可登录"。数据库中 `admin` 账户口令仍是弱口令。
   - **动作**：登录后台 → 修改密码，改为 12 位以上强口令；建议同时新建个人管理员账号、停用/重命名默认 `admin`。
   - 本地代码无法改远端数据库口令，必须手动操作。

2. **`config/config.php` 明文数据库凭据入库到仓库**
   - `git status` 显示仓库在版本控制下，明文库名/账号/密码一旦泄露即可被连库。
   - **动作**：将 `config/config.php` 加入 `.gitignore`；生产用环境变量或服务器本地不入库的配置；若已 push 过，需在服务器**轮换数据库密码**。

### 🟠 中危（本次已在代码层修复）
3. **文件上传仅校验扩展名 → SVG 存储型 XSS / 伪造图片**
   - 原 `uploadFile()` 只看扩展名，允许 `.svg`；SVG 可内嵌 `<script>`/`on*` 事件，作为公开图片被访问即触发 XSS。
   - **已修复**（`app/Controllers/Admin/AdminController.php`）：
     - 光栅图用 `getimagesize` + `finfo` 真实 MIME 双校验；
     - 新增 8MB 体积上限，防 DoS；
     - SVG 落盘前 `sanitizeSvg()` 消毒：剥离 `<script>`/`<foreignObject>`/`on*` 事件/`javascript:` 协议/`<a>`；
     - 文件名随机化，杜绝覆盖与路径穿越。

### 🟡 建议（加固项，未改动）
4. **上传目录禁执行**：给 `public/assets/uploads` 增加"禁止解析 PHP"规则（Nginx `location` 或 Apache `.htaccess`），纵深防御。
5. **HTTPS 强制**：确认全站 301 跳转 HTTPS + HSTS（仓库已有 `bt-ssl-dns.md`，请核对生效）。
6. **备份**：定期数据库 + `assets/uploads` 备份。

---

## 三、后台美化（本次已完成）

针对"后台太简陋"，在**不改动业务逻辑**前提下重构了视觉层：

### 设计系统
- 新增 CSS 设计令牌（品牌渐变、深色侧栏、圆角、三级阴影），统一 `admin.css`。
- 全站**弃用 emoji 图标**，改为内联 **Lucide 线性 SVG**（新增 `admin_icon()` 助手，随主题变色、跨平台一致，符合规范）。

### 具体改造
- **侧边栏**：深色渐变、SVG 图标、悬停/选中态（左侧高亮条 + 品牌渐变），滚动条美化，底部"查看前台"入口。
- **顶栏**：毛玻璃粘顶、圆形头像、图标化按钮（修改密码/退出）。
- **登录页**：品牌徽标、渐变光晕背景、卡片投影、占位提示、安全提示。
- **仪表盘**：4 张彩色统计卡（带图标徽标、悬停上浮）+ "快捷入口"卡片网格 + 最近新闻表格。
- **组件**：按钮/表格/表单/徽标统一圆角、阴影、悬停微交互；表头小写字距优化。
- **子系统（CRM/PSI）**：同步套用新导航与图标风格。

### 改动文件
- `app/Core/Helper.php`：新增 `admin_icon()`；导航项 emoji → 图标名（`ic`）。
- `public/assets/css/admin.css`：设计令牌 + 侧栏/顶栏/卡片/按钮/表格/表单重构。
- `app/Views/layouts/admin.php`、`app/Views/layouts/subsys.php`：SVG 图标化布局。
- `app/Views/admin/dashboard.php`、`app/Views/admin/login.php`：重构。

---

## 四、待你确认/执行清单
- [ ] **立即**：登录后台修改 `admin` 弱口令（当前 `admin888`）。
- [ ] `config/config.php` 加入 `.gitignore`；如已提交，服务器轮换 DB 密码。
- [ ] 为 `assets/uploads` 增加禁 PHP 执行规则。
- [ ] 核对 HTTPS 强跳与 HSTS。
- [ ] 部署后台美化到远端（上传上述改动文件即可，无需数据库变更）。
