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 提取 → 社工攻击链
10.3 JWT Token 冒充攻击
综合风险热力图
优先修复路线图
P0 — 今日内
- 封禁 Nacos 8848/9848 端口公网访问
- JWT Token 迁移至 HttpOnly + Secure + SameSite Cookie
- 清除 sessionStorage 中的用户 PII 数据
- OAuth 重定向强制 HTTPS + 配置 HSTS
P1 — 一周内
- 实施登录限速(5 次/分钟)+ 账户锁定(5 次失败锁 30 分钟)
- 配置 CSP 安全策略
- 启用弱密码校验
isShowWeakPassword: true
- 升级 jQuery 至 3.7+
- Actuator 从公网完全摘除
P2 — 一月内
- Token 有效期缩短至 30 分钟 + Refresh Token
- CORS
Access-Control-Allow-Headers 精确白名单
- 引入滑动拼图验证码替代图形码
- JWT Payload 最小化(移除 PII)
- 配置文件敏感信息改为后端动态下发