Files
cloud-chip.cn/SECURITY_REPORT.md
T
2026-08-08 18:27:38 +08:00

105 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 企业官网 · 安全等级评估报告
> 评估对象:cloud-chip-laravel-vueLaravel 12 + Vue3 CDN 零构建栈)
> 评估日期:2026-08-03
> 评估方式:源码审计 + 本地运行验证(PHP 8.3 / MySQL 5.7),覆盖路由、控制器、中间件、配置、视图与依赖。
---
## 一、综合评级
| 场景 | 综合等级 | 说明 |
| --- | --- | --- |
| 当前(本地开发配置) | **B** | 框架与代码安全基线良好;但 `.env` 仍是开发值(`APP_DEBUG=true``SESSION_SECURE_COOKIE=false`),且此前缺少响应头与登录节流(本次已修复)。 |
| 部署合规后(修正配置 + HTTPS) | **A** | 达到企业官网安全基线。剩余项均为可选增强。 |
> 评级说明:本项目基于 Laravel 12「安全优先」框架,代码层已具备 CSRF、参数化查询、输出转义、严格上传校验等能力;风险主要集中在**部署配置**与**纵深防御响应头**,均已给出整改项。
---
## 二、各安全维度评分
| 维度 | 评级 | 关键依据 |
| --- | --- | --- |
| 注入防护(SQLi / XSS | **A** | Eloquent 全程参数化查询,杜绝 SQL 注入;视图默认 `{{ }}` 转义;富文本经 `mews/purifier` 净化(default/article 两档)。 |
| 身份认证与会话 | **A** | 密码 bcrypt 哈希;登录成功 `session()->regenerate()` 防会话固定;新增登录节流(5 次/分钟);后台具备 RBAC 五角色 + 权限点门禁。 |
| Cookie 安全 | **B+** | `http_only=true``encrypt=true``same_site=lax` 均已开启;`secure``.env` 中为 `false`(本地值,上线须置 `true`)。 |
| 配置安全 | **C+** | 当前 `.env``APP_DEBUG=true``APP_ENV=local`、数据库弱口令 `cloudchip_cn/cloudchip_cn`——**均为本地开发值,上线前必须修改**。 |
| 传输与响应头 | **A** | 本次新增 `SecurityHeaders` 中间件:CSP、X-Frame-Options(DENY)、X-Content-Type-Options(nosniff)、Referrer-Policy、Permissions-PolicyHSTS 待生产 HTTPS 启用。 |
| 文件上传 | **A** | `image` + `mimes:jpg,jpeg,png,gif,webp` + `max:5120` 严格校验;存储于 `storage/app/public`(经 `storage:link` 暴露,非 PHP 执行目录),命名随机防遍历。 |
| 防滥用 / 限流 | **A** | 联系表单 `RateLimiter` 5 次/60 秒;登录接口新增 `ThrottlesLogins` 5 次/分钟(按 IP+邮箱)。 |
| 依赖与供应链 | **B** | 仅引入 `mews/purifier``simple-qrcode` 等少量可信依赖;建议上线前执行 `composer audit`。 |
| 日志与错误处理 | **B+** | `LOG_CHANNEL=stack`;只要 `APP_DEBUG=false`,异常不会向用户泄露堆栈与环境信息。 |
---
## 三、本次已实施的安全加固(代码层)
1. **新增 `App\Http\Middleware\SecurityHeaders` 并注册到 `web` 中间件组**
- 下发 `Content-Security-Policy`(限制脚本/样式/连接/表单来源,显著缩小 XSS 影响面)、`X-Frame-Options: DENY`(防点击劫持)、`X-Content-Type-Options: nosniff`(防 MIME 嗅探)、`Referrer-Policy``Permissions-Policy`
- 生产 + HTTPS 环境下自动追加 `Strict-Transport-Security`HSTS,含 `preload`)。
- CSP 针对本项目的零构建架构做了适配:放行 `cdn.tailwindcss.com` 与内联脚本/样式(否则 Tailwind Play CDN 与内联 `tailwind.config` 会被拦截)。
2. **登录接口增加防暴力破解节流**
- `LoginController` 引入 `ThrottlesLogins`,同一 IP+邮箱 每分钟最多 5 次,超限返回校验错误并锁定。
3. **修复联系表单 CSRF 失效缺陷(功能性 + 安全性)**
- 发现布局缺少 `<meta name="csrf-token">`,导致 Vue 联系表单取不到 token、提交被 Laravel 拦截返回 419(原表单实际不可用)。
- 已在布局 `<head>` 补齐该 meta 标签,并经端到端验证:取 token → POST → 返回 `{"ok":true}`HTTP 200。
---
## 四、残余风险与整改建议(按优先级)
### P0 · 上线前必须完成
- [ ] **关闭调试模式**`.env``APP_DEBUG=false``APP_ENV=production`。否则将向访客泄露堆栈、环境变量等敏感信息。
- [ ] **启用安全 Cookie**`SESSION_SECURE_COOKIE=true`(HTTPS 站点必须),防止会话被明文中间人窃取。
- [ ] **强制 HTTPS**:在反向代理/Web 服务器层 301 跳转 HTTP→HTTPS,并启用 HSTS(中间件已在生产自动下发)。
- [ ] **数据库强口令 + 最小权限**:更换为高强度独立口令,账号仅授予本站库所需权限;切勿使用本地弱口令 `cloudchip_cn`
- [ ] **保护敏感文件**:确保 `.env``.gitignore``.workbuddy` 等不被 Web 直接访问(当前项目结构 `.env``public/` 之外,已天然隔离;部署时复核 Nginx/Apache 配置,禁止访问点号开头的隐藏文件)。
### P1 · 强烈建议
- [ ] **配置可信代理 `TrustProxies`**:若站点置于 CDN / 负载均衡之后,需在 `bootstrap/app.php` 声明可信代理,否则 `secure` cookie 与 `isSecure()` 会误判,影响 HTTPS 与会话安全。
- [ ] **依赖审计**:上线前执行 `composer audit` 并升级存在 CVE 的包。
- [ ] **后台安全增强**:管理员登录增加失败告警 / 锁定,条件允许时启用 2FA;对 `/admin` 异常访问做监控。
- [ ] **异常监控**:对批量联系提交、异常登录、5xx 突增配置告警。
### P2 · 可选增强
- [ ] **收紧 CSP**:将 Tailwind 改为构建产物 + 为内联脚本加 `nonce`,从而移除 `unsafe-inline`,把 XSS 防御从「依赖转义」升级为「双层防护」。
- [ ] **合规页面**:补充 `security.txt`、隐私政策与备案信息展示(页脚已预留 ICP / 公安备案位)。
- [ ] **外部资源 SRI**:若后续引入任何第三方脚本/样式,添加子资源完整性校验。
---
## 五、部署上线前必检清单
| 检查项 | 命令 / 位置 | 期望 |
| --- | --- | --- |
| 调试关闭 | `.env` `APP_DEBUG` | `false` |
| 环境 | `.env` `APP_ENV` | `production` |
| Cookie 安全 | `.env` `SESSION_SECURE_COOKIE` | `true` |
| APP_KEY | `php artisan key:generate`(如未生成) | 已设置且唯一 |
| 路由缓存 | `php artisan route:cache` | 无冲突 |
| 视图缓存 | `php artisan view:cache` | 编译通过 |
| 数据库迁移 | `php artisan migrate --force` | 成功 |
| 依赖审计 | `composer audit` | 无高危 |
| HTTPS | Web 服务器 / CDN | 已启用 + 跳转 |
| 静态资源软链 | `php artisan storage:link` | `/storage` 可访问 |
---
## 六、验证记录(本地)
| 页面 | 路由 | 状态码 |
| --- | --- | --- |
| 首页 | `/` | 200 |
| 关于我们 | `/about` | 200 |
| 产品服务 | `/products` | 200 |
| 联系我们 | `/contact` | 200 |
| 联系表单提交(带 CSRF | `POST /contact` | 200 `{"ok":true}` |
| 安全响应头 | 所有页面 | CSP / XFO / NoSniff / Referrer / Permissions 均已下发 |
---
*报告由 WorkBuddy 基于真实源码与本地运行结果生成,非泛泛模板。所有 P0 项均为部署配置,不依赖代码改动即可完成。*