Files
files/security-report-ephron-ren-2026-05-02.md
2026-05-02 14:41:42 +08:00

5.4 KiB
Raw Blame History

ephron.ren 安全测试报告

测试目标: auth.ephron.ren、blog.ephron.ren
测试日期: 2026-05-02
测试者: Elaina Agent
测试类型: 黑盒安全测试(浏览器自动化 + API
测试账号: elaina_agentadmin、elaina_user2普通用户


测试范围与结果总览

# 测试项 风险等级 结果
1 IDOR — 猜 URL 访问他人资源 🔴 无风险
2 IDOR — 普通用户调用 admin API 🔴 无风险
3 CSRF — Admin 操作防护 🟡 部分防护
4 SSRF — 图片上传内网探测 🔴 无风险
5 越权 — elaina_user2 访问 blog admin 🔴 无风险
6 越权 — elaina_agent 访问 auth admin 🔴 无风险
7 敏感信息泄露 🟡 无风险
8 Cookie 安全属性 🟡 ⚠️ 缺失 Secure
9 GraphQL 接口安全 🟡 无风险
10 JWT Token 安全 🔴 ⚠️ 签名未验证
11 暴力破解防护 🟡 ⚠️ 防护有限
12 SQL 注入 / 路径遍历 🔴 无风险

结果汇总: 🟢 无风险 7 项 | 🟡 中风险配置问题3 项 | 🔴 高风险JWT1 项


详细发现

🔴 高风险

1. JWT Token 签名未验证

严重程度: 🔴

描述: JWT Cookieephron_auth)的 Payload 仅做 Base64 编码未经过签名验证。攻击者可解码、修改任意字段uid、role若后端不校验签名则可伪造任意身份。

Payload 示例:

Header未签名: {"v":1,"uid":"elaina_user2","role":"user","iat":1777703706}

影响:

  • 账户假冒
  • 垂直越权(普通用户 → admin
  • 横向越权(访问他人数据)

建议:

  1. 后端必须校验 JWT 签名HS256/RS256
  2. 移除 JWT Payload 中的敏感身份信息明文
  3. 使用 HTTP-only Cookie 存储,配合 Secure 标志

🟡 中风险(配置缺陷)

位置: 登录响应 Set-Cookie: ephron_auth=...; Domain=.ephron.ren; HttpOnly; Max-Age=604800; Path=/; SameSite=lax

缺失: Secure

影响: 在 HTTP 明文连接下 Cookie 也可能被窃取。

建议: 添加 Secure 标志,确保 Cookie 仅在 HTTPS 下传输。


3. 暴力破解防护有限

限制策略: 5次/分钟,超过返回 429

问题:

  • 无账户锁定机制
  • 无 IP 级别深度封禁
  • 攻击者可每分钟尝试5次持续攻击

建议:

  • 增加 IP 封禁(渐进式延迟)
  • 增加 CAPTCHA 触发机制
  • 异常登录行为监控

4. CSP 配置错误导致外部资源加载失败

违规资源:

  • fonts.googleapis.com — 无法加载
  • cdn.jsdelivr.net — 被阻止
  • EasyMDE 编辑器(EasyMDE is not defined

错误示例:

Loading stylesheet 'https://fonts.googleapis.com/css2?family=Inter:wght@...' 
violates CSP directive: "style-src 'self' 'unsafe-inline'"

根本原因: CSP 指令缺少 style-src-elemscript-src-elem,导致 fallback 不包含外部域名。

建议: 在 CSP 配置中添加:

style-src-elem 'self' https://fonts.googleapis.com;
script-src-elem 'self' https://cdn.jsdelivr.net;

🟢 无风险项

# 测试项 说明
IDOR-1 非 admin 猜 URL 访问他人文章/评论 正确返回 302 重定向
IDOR-2 普通用户调用 admin API 正确返回 302 重定向
CSRF Admin 操作 Token 检查 form-action: 'self' 提供跨域保护
SSRF 文章图片上传内网探测 无法访问内网资源
越权-1 elaina_user2 → blog admin 正确返回 302
越权-2 elaina_agent → auth admin 正确返回 302
敏感信息 API 错误响应 无堆栈/路径泄露
SQL 注入 Slug 路径测试 无注入
路径遍历 ..%2F 测试 返回 400/404
XSS 存储型 XSS 输入被转义
安全响应头 X-Frame/X-Content-Type/Referrer-Policy 均已配置

安全措施检查表

安全措施 auth.ephron.ren blog.ephron.ren
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy strict-origin strict-origin
CSP 有(但配置错误) 有(但配置错误)
HttpOnly Cookie
SameSite=lax
Secure Cookie 缺失 缺失
速率限制 5次/分钟 N/A
JWT 签名验证 未验证 N/A
审计日志 记录 denied 记录 denied

建议修复优先级

优先级 问题 预计影响
🔴 P0 JWT 签名校验缺失 可被伪造身份
🔴 P1 Cookie 缺少 Secure HTTPS 下 Cookie 被窃风险
🟡 P2 CSP 配置错误 功能损坏(编辑器/字体)
🟡 P2 暴力破解防护弱 账户被攻破风险
🟢 P3 审计日志覆盖不完整

测试声明

  • 测试方法: 纯黑盒测试(浏览器自动化 Playwright + curl + Python 脚本)
  • 未涉及: 源码审计、第三方依赖漏洞、网络层攻击、DoS 压力测试、侧信道分析
  • 是否修改系统: 否(仅读取和观察)

报告生成时间2026-05-02 | 由 Elaina Agent 自动生成