93 lines
5.4 KiB
Markdown
93 lines
5.4 KiB
Markdown
# 圣巧依 / 酷冰甲 CMS — 完整性 · 安全性审计 & 后台美化报告
|
||
|
||
- 本地:`G:\www\phpEnv\www\圣巧依新的`
|
||
- 远端:https://coolcoth.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。
|
||
- [ ] 部署后台美化到远端(上传上述改动文件即可,无需数据库变更)。
|