# Web 安全攻防全景指南 × 福建省政府采购网 漏洞对照分析报告 > **评估时间**:2026-03-10 > **评估目标**:`zfcg.czt.fujian.gov.cn`(福建省政府采购网) > **参照标准**:Web 安全攻防全景指南(10 大领域) --- ## 总览:漏洞与指南章节映射 | 指南章节 | 涉及漏洞数 | 最高等级 | 关键发现 | |----------|-----------|----------|----------| | 1. Web 端安全注入 | 2 | 🟢 低 | SQL 注入被 WAF 静默拦截;XSS 风险理论存在 | | 2. 客户端本地数据安全 | 4 | 🔴 紧急 | JWT/PII 明文存储于 localStorage/sessionStorage | | 3. 跨域安全与同源策略 | 2 | 🟡 中 | CORS Headers 通配符;缺少 CSRF Token | | 4. HTTPS 与传输层安全 | 2 | 🔴 高危 | OAuth 重定向使用 HTTP;缺少 HSTS | | 5. 身份认证与会话安全 | 4 | 🔴 高危 | 无暴力破解防护;弱密码校验关闭;Token 7h 有效期 | | 6. 服务器端安全漏洞 | 1 | 🟡 中 | 路径遍历测试被拦截 | | 7. 服务器配置与基础设施 | 5 | 🔴 紧急 | Nacos 8848 对外暴露;Actuator 可公网触达 | | 8. 开源软件与依赖安全 | 2 | 🟡 中 | jQuery 1.12.4 已知 CVE;CKEditor 历史漏洞 | | 9. 安全规范与全流程管理 | 2 | 🟡 中 | 版本号暴露;配置文件泄露加密密钥 | | 10. 提权攻击验证 | 3 | 🟡 中 | userTypeNow 修改被检测;PII 可被社工利用 | --- ## 1. Web 端安全注入 ### 1.1 SQL 注入 → 🟢 低危(有防护) | 测试项 | Payload | 结果 | |--------|---------|------| | 经典注入 | `admin'--` | 空响应(WAF 拦截) | | 联合注入 | `UNION SELECT 1,2,3--` | 空响应(WAF 拦截) | | 布尔盲注 | `admin" OR 1=1--` | 空响应(WAF 拦截) | | 认证态注入 | `userId=...%27 OR 1=1--` | 空响应(WAF 拦截) | **指南对照**:系统对 SQL 注入有**有效的 WAF 防护**(静默 DROP 策略),符合参数化查询防御规范。但建议确认后端是否同时使用了参数化查询(ORM),而非仅依赖 WAF。 ### 1.2 XSS → 🟡 中危(理论风险高) | 风险点 | 状态 | 影响 | |--------|------|------| | CKEditor 富文本编辑器 | 版本未知,历史 XSS 多 | 存储型 XSS 可能 | | 缺少 CSP 策略 | ❌ 未配置 | 无法防御内联脚本注入 | | jQuery 1.12.4 CVE | CVE-2020-11022/11023 | DOM XSS | | Token 在 localStorage | 可被 JS 直接读取 | XSS → Token 窃取 | **指南对照**: - ❌ 未实施 CSP(违反 1.2 输出编码/CSP 规范) - ❌ Token 未使用 HttpOnly Cookie(违反 1.2 HttpOnly Cookie 规范) - ❌ 使用陈旧 jQuery(违反 8.1 版本更新规范) --- ## 2. Web 客户端本地数据安全 ### 2.1 Cookies 安全 → 🔴 高危 | Cookie | HttpOnly | Secure | SameSite | 评估 | |--------|----------|--------|----------|------| | `access_token` | ❌ 否 | 未确认 | 未设置 | 🔴 **紧急** | | `tenantId` | ❌ 否 | 未确认 | 未设置 | 🟡 中危 | **指南对照**: - ❌ 违反 2.1「HttpOnly 属性」规范 — Token Cookie 可被 JS 读取 - ❌ 违反 2.1「SameSite 属性」规范 — 未设置跨站防护 - ❌ 违反 2.1「Cookie 签名与加密」规范 — Token 明文存储 ### 2.2 Local Storage 与 Session Storage → 🔴 紧急 | 存储位置 | 键名 | 泄露内容 | 风险 | |----------|------|----------|------| | localStorage | `portal-access_token` | 完整 JWT Token | 🔴 XSS → 冒充 | | localStorage | `errLog` | 后端堆栈/接口路径 | 🟡 架构泄露 | | sessionStorage | `ice-USER_DATA_INFO` | 手机号/邮箱/CA标识/userId | 🔴 PII 泄露 | **指南对照**: - ❌ **严重违反** 2.2「禁止存储敏感信息」规范 — JWT Token 明文存储于 localStorage - ❌ **严重违反** 2.2 规范 — PII(手机号 `13514069349`、邮箱 `3808789405@qq.com`)存储于 sessionStorage --- ## 3. 跨域安全与同源策略 ### 3.1 CORS → 🟡 中危 | 测试 | 结果 | |------|------| | `Origin: https://evil.com` → Allow-Origin 回显 | ❌ 未回显(✅安全) | | `Access-Control-Allow-Headers` | `*`(🟡 过宽) | **指南对照**: - ✅ 未盲目反射 Origin(符合 3.1 规范) - ❌ Headers 使用通配符(违反 3.1「限制允许的头部」规范) ### 3.2 CSRF → 🟡 中危 - 未发现 Anti-CSRF Token 机制 - SameSite Cookie 未设置 - 依赖 OAuth Bearer Token 作为隐式防护 **指南对照**: - ❌ 缺少 Anti-CSRF Token(违反 3.2 规范) - ❌ SameSite 未设置(违反 3.2 规范) --- ## 4. HTTPS 与传输层安全 ### 4.1 未加密传输 → 🔴 高危 | 发现 | 详情 | |------|------| | OAuth 重定向使用 HTTP | `Location: http://zfcg.czt.fujian.gov.cn/gp-auth-center/oauth/authorize?...` | | 缺少 HSTS 头 | 未配置 `Strict-Transport-Security` | **指南对照**: - ❌ **严重违反** 4.1 MITM 防护规范 — OAuth 授权码通过 HTTP 明文传输 - ❌ 违反 4.3「强制 HTTPS (HSTS)」规范 ### 4.2 重放攻击 → 🟡 中危 - JWT 包含 `jti`(Token ID),理论上可用于防重放 - 但未确认后端是否维护 jti 黑名单 - Token 有效期 7 小时,窗口期较长 --- ## 5. 身份认证与会话安全 ### 5.1 密码安全 → 🟡 中危 | 测试项 | 结果 | |--------|------| | 弱密码校验 | ❌ **已关闭**(`isShowWeakPassword: false`) | | 验证码强度 | 4 位静态图形码,OCR 可自动识别 | | 暴力破解防护 | ❌ **不存在** — 5 次快速尝试无阻断 | | 账户锁定机制 | ❌ 未发现 | **指南对照**: - ❌ 违反 5.1「防暴力破解」规范 — 无速率限制、无账户锁定、验证码强度极弱 - ❌ 违反 5.1「密码策略」规范 — 弱密码校验被管理员关闭 ### 5.2 会话管理 → 🟡 中危 | 维度 | 状态 | |------|------| | Token 算法 | ✅ RS256(安全) | | Token 有效期 | ⚠️ ~7 小时(过长) | | Token 过期校验 | ✅ 正常拒绝(code 5560) | | Session 固定防护 | 未测试 | --- ## 6. 服务器端安全漏洞 ### 6.1 SSRF → 未测试 ### 6.2 XXE → 未测试(系统主要使用 JSON,非 XML) ### 6.3 文件上传 → 未测试 ### 6.4 路径遍历 → 🟢 低危 | 测试 | Payload | 结果 | |------|---------|------| | 文件下载路径遍历 | `path=../../etc/passwd` | 空响应(被拦截) | --- ## 7. 服务器配置与基础设施安全 ### 7.1 Nacos 服务注册中心暴露 → 🔴 紧急 | IP | 端口 | TCP 状态 | |----|------|----------| | 112.54.45.252 | 8848 | **OPEN** | | 120.35.30.176 | 8848 | **OPEN** | | 114.115.172.176 | 8848 | **OPEN** | **指南对照**:严重违反 7.x 服务器配置安全规范 — 微服务注册中心核心组件直接对公网暴露。 ### 7.2 Spring Boot Actuator → 🟡 中危 - `/gateway/actuator/health|beans|mappings` 返回 401(Nginx Basic Auth) - `/gateway/actuator/env` 返回 403(额外封锁) ### 7.3 安全响应头 → 🟡 中危 | 响应头 | 状态 | |--------|------| | `X-Content-Type-Options: nosniff` | ✅ 已配置 | | `X-XSS-Protection: 1; mode=block` | ✅ 已配置 | | `X-Frame-Options` | ✅ `SAMEORIGIN` | | `Content-Security-Policy` | ❌ **缺失** | | `Strict-Transport-Security` | ❌ **缺失** | | `Referrer-Policy` | ✅ `no-referrer` | ### 7.4 非标端口暴露 → 🟡 中危 | IP | 端口 | 响应 | |----|------|------| | 112.54/120.35 | 8080 | 404 OpenResty | | 120.35.30.176 | 9090 | 502 Bad Gateway | | 114.115.172.176 | 8090 | 400 Bad Request | --- ## 8. 开源软件与依赖安全 | 组件 | 版本 | 已知 CVE | 风险 | |------|------|----------|------| | jQuery | 1.12.4 | CVE-2020-11022, CVE-2020-11023 | 🟡 中(XSS) | | CKEditor | 未知 | 多个历史 XSS CVE | 🟡 中 | | nginx | 1.20.2(华为云) | 非最新版 | 🟢 低 | | sm2.min.js | V3.0.0.574 | 未知 | 🟢 低 | **指南对照**: - ❌ 违反 8.1「版本更新」规范 — jQuery 1.12.4 发布于 2016 年 --- ## 9. 安全规范与全流程管理 | 发现 | 对应规范 | |------|----------| | HTML `data-tag` 暴露版本号 | 违反「信息最小化原则」 | | `config.js` 暴露 RSA 公钥/SM4 密钥 | 违反「敏感配置管理」规范 | | 错误日志写入 localStorage | 违反「生产环境日志管理」规范 | | `isShowWeakPassword: false` 生产环境暴露 | 违反「安全默认配置」原则 | --- ## 10. 提权攻击验证(实测记录) ### 10.1 userTypeNow 修改提权测试 | 步骤 | 操作 | 结果 | |------|------|------| | 1 | 读取 `sessionStorage['ice-USER_DATA_INFO']` | `userTypeNow: "3"` (代理机构) | | 2 | 修改 `userTypeNow` 为 `"1"` (疑似管理员) | ✅ 成功写入 sessionStorage | | 3 | 刷新页面 `location.reload()` | ⚠️ 弹出"登录超时",会话失效 | | 4 | 恢复 `userTypeNow` 为 `"3"` | 会话已失效,需重新登录 | **结论**: - ✅ 后端/前端有角色一致性校验机制 — 修改 userTypeNow 后刷新会导致 Token 与 Session 数据不一致检测 - ⚠️ **但未测试不刷新页面的情况** — 如果仅通过前端路由(SPA 内部跳转)而非页面刷新切换到管理员模块,可能绕过此校验 - ⚠️ **角色枚举信息泄露** — Token Payload 暴露了角色体系(`userTypeNow: "3"`),攻击者可推断出完整的角色类型列表 ### 10.2 PII 提取 → 社工攻击链 ``` sessionStorage['ice-USER_DATA_INFO'] → 手机号: 13514069349 → 邮箱: 3808789405@qq.com → CA标识: 3452585403150523 攻击链: XSS漏洞 → 窃取 sessionStorage → 提取 PII → 伪装成政采网客服致电/发邮件 → 诱导用户提供密码或 CA 证书 → 完全控制账户 ``` ### 10.3 JWT Token 冒充攻击 ``` localStorage['portal-access_token'] → 完整 JWT Token(RS256 签名,7h 有效期) 攻击链: XSS漏洞 → 窃取 localStorage Token → 在攻击者浏览器中设置 Cookie: access_token= → 直接访问 https://zfcg.czt.fujian.gov.cn/all-portal/portal/ → 完全冒充受害者身份进行所有操作(~7小时窗口) ``` --- ## 综合风险热力图 ``` 影响severity → Low Medium High Critical ┌─────────┬──────────┬─────────┬──────────┐ Confirmed │ SQLi拦截 │ jQuery │ 无暴破 │ Token │ 已验证 │ 路径遍历 │ CORS * │ HTTP │ PII明文 │ │ │ Actuator │ OAuth │ Nacos │ ├─────────┼──────────┼─────────┼──────────┤ Likely │ │ CKEditor │ CSRF │ XSS→Token│ 可能 │ │ 版本暴露 │ IDOR │ 社工攻击 │ ├─────────┼──────────┼─────────┼──────────┤ Potential │ │ Session │ 垂直越权│ │ 潜在 │ │ Fixation │ SSRF │ │ └─────────┴──────────┴─────────┴──────────┘ 可能性 likelihood → ``` --- ## 优先修复路线图 ### P0 — 今日内 1. 封禁 Nacos 8848/9848 端口公网访问 2. JWT Token 迁移至 HttpOnly + Secure + SameSite Cookie 3. 清除 sessionStorage 中的用户 PII 数据 4. OAuth 重定向强制 HTTPS + 配置 HSTS ### P1 — 一周内 5. 实施登录限速(5 次/分钟)+ 账户锁定(5 次失败锁 30 分钟) 6. 配置 CSP 安全策略 7. 启用弱密码校验 `isShowWeakPassword: true` 8. 升级 jQuery 至 3.7+ 9. Actuator 从公网完全摘除 ### P2 — 一月内 10. Token 有效期缩短至 30 分钟 + Refresh Token 11. CORS `Access-Control-Allow-Headers` 精确白名单 12. 引入滑动拼图验证码替代图形码 13. JWT Payload 最小化(移除 PII) 14. 配置文件敏感信息改为后端动态下发