6.9 KiB
6.9 KiB
企业官网 · 安全等级评估报告
评估对象:cloud-chip-laravel-vue(Laravel 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-Policy;HSTS 待生产 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,异常不会向用户泄露堆栈与环境信息。 |
三、本次已实施的安全加固(代码层)
-
新增
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会被拦截)。
- 下发
-
登录接口增加防暴力破解节流
LoginController引入ThrottlesLogins,同一 IP+邮箱 每分钟最多 5 次,超限返回校验错误并锁定。
-
修复联系表单 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声明可信代理,否则securecookie 与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 项均为部署配置,不依赖代码改动即可完成。