文件
websafe-kb/06-case-studies/fujian-gov-procurement/reports/security_assessment_report.md
hao cda31e86c7 初始化: Web安全攻防知识库
- 靶场环境: DVWA/WebGoat/Pikachu/BWAPP/SQLi-Labs/XSS-Labs
- SQL注入工具: sqli-scanner.py, blind-sqli.py, sqli-exploit.go
- XSS工具: xss-fuzzer.py, xss-scanner.go
- 认证攻击: web-brute.py, jwt-cracker.py
- 服务端安全: port-scanner.py, tls-scanner.py
- 防御配置: nginx-hardening.conf
- 案例研究: 福建政采网安全评估报告 (13份)
- 同步脚本: sync-gitea.sh
2026-03-16 17:10:23 -07:00

13 KiB
原始文件 Blame 文件历史

🛡️ 福建省政府采购网 安全评估报告

目标站点https://zfcg.czt.fujian.gov.cn 评估时间2026-03-09 评估范围:前端架构 / 后端接口 / 服务器基础设施 / 弱口令


一、系统架构总览

1.1 前端架构

维度 详情
框架 Vue.js + Alibaba icestark 微前端架构
构建工具 Vite登录模块 gp-auth-web/ Vue CLI主站 gpcms-center-web
版本标识 登录:V6.0.33.1_2_251020_GP-AUTH-WEB / 主站:V6.5.15.1_1_20260119_gpcms-center-web
加密库 SM2 国密算法 (sm2.min.js V3.0.0.574)、SM4 对称加密、RSA 加密
依赖库 jQuery 1.12.4、qrcode.min.js、CKEditor富文本、axios
CA 组件 Kinggrid 金格电子签章、GEL 格尔CA、ZHCAUnifiedTools数字证书工具
第三方服务 Udesk 在线客服、gov.govwza.cn 适老化脚本、纠错系统sitecode: 2300000055

前端子系统清单

gp-auth-web       → 统一身份认证/登录       (Vite SPA)
gpcms-center-web  → 门户首页/公开信息       (Vue CLI SPA)
all-portal/portal  → 工作台仪表盘           (icestark 微前端宿主)

1.2 后端架构

graph TD
    A["浏览器 Client"] -->|HTTPS| B["OpenResty<br/>(Nginx+Lua)"]
    B -->|/gateway/*| C["API 网关层"]
    C --> D["gp-auth-center<br/>身份认证"]
    C --> E["gp-trade<br/>电子交易"]
    C --> F["gp-expert<br/>专家抽取"]
    C --> G["gp-agency<br/>代理机构"]
    C --> H["gp-complaint<br/>投诉管理"]
    C --> I["gp-integrity<br/>诚信管理"]
    C --> J["gp-frame<br/>框架协议"]
    C --> K["gp-esign<br/>电签配置"]
    C --> L["gp-supervise<br/>监督预警"]
    C --> M["gp-cms<br/>内容管理"]
    C --> N["gp-file<br/>文件服务"]
    C --> O["gp-workflow<br/>工作流"]
    C --> P["gp-message<br/>消息服务"]
    C --> Q["gp-basic-data<br/>基础数据"]
    C --> R["gpx-basic-platform<br/>基础业务平台"]
    C --> S["gpe-evaluation<br/>评标管理"]
    C --> T["gp-portal-center<br/>门户管理"]
    B -->|静态资源| U["华为云<br/>114.115.172.176"]
组件 技术
反向代理 OpenResty (Nginx + Lua)
认证协议 OAuth 2.0 Authorization Code Flow
令牌格式 JWT (access_token)
微服务数量 至少 15+ 个独立微服务
部署 本地机房(电信/移动)+ 华为云混合部署

二、前端风险评估

🔴 高危风险

F-01JWT Token 明文多处存储

Caution

access_tokenJWT同时存储在 CookielocalStorage 中,一旦发生 XSS 攻击,攻击者可直接窃取 Token 并冒充用户访问所有后端接口。

  • 位置Cookie access_token + localStorage['access_token']
  • 影响:完全的会话劫持,可遍历所有业务子系统
  • 建议Token 仅存放于 HttpOnly + Secure + SameSite=Strict 的 Cookie 中,禁止前端 JS 直接读取

F-02sessionStorage 明文存储用户 PII 数据

Caution

sessionStorage 中以明文 JSON 存储了完整的用户个人信息,包含手机号、邮箱、身份证号后缀、机构编码等敏感数据。

  • 影响XSS 攻击可一次性提取全部用户身份信息
  • 建议:最小化存储原则,仅保存用户 ID 和必要的显示名称,不缓存身份证/手机号等 PII

F-03错误日志泄露后端架构信息

  • 位置localStorage['errLog']
  • 内容:包含后端内部接口路径、组件堆栈信息、完整 URL 映射
  • 影响:攻击者无需主动探测即可获得后端微服务拓扑
  • 建议:生产环境禁止向 localStorage 写入错误堆栈,使用远程错误上报服务

🟡 中危风险

F-04配置文件公开暴露敏感密钥

  • 文件/gp-auth-web/config.js/gpcms-center-web/static/config.js
  • 泄露内容
泄露项 值(摘要)
SM4 加密公钥 bd03ed6802681a34166256aba610becf
RSA 公钥 ASCII 编码完整公钥
网关架构 完整的 gateway 路径和 logout/logo 接口
内网 IP 114.115.172.176(华为云)
  • 影响:攻击者可利用公钥伪造加密请求、了解完整系统拓扑
  • 建议:敏感配置通过后端 API 动态下发,移除客户端硬编码

F-05缺少 Content-Security-Policy (CSP) 策略

  • 现状:页面未配置任何 CSP Meta 标签或 HTTP 响应头
  • 影响:无法防御 XSS 注入、内联脚本执行、恶意外部资源加载
  • 建议:配置严格 CSP,至少包含 script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:

F-06弱密码校验功能被禁用

  • 配置config.jsisShowWeakPassword: false
  • 影响:用户可使用 123456password 等弱密码注册和登录
  • 建议isShowWeakPassword 改为 true,并在后端同步校验密码强度

F-07jQuery 版本过旧

  • 当前版本jQuery 1.12.42016 年发布)
  • 已知 CVECVE-2020-11022、CVE-2020-11023XSS 漏洞)
  • 建议:升级至 jQuery 3.6+ 或移除 jQuery 依赖

F-08版本号暴露

  • 位置HTML data-tag 属性
  • V6.0.33.1_2_251020_GP-AUTH-WEBV6.5.15.1_1_20260119_gpcms-center-web
  • 影响:攻击者可精确匹配已知漏洞
  • 建议:生产环境移除版本标识

三、后端接口风险评估

🔴 高危风险

B-01OAuth 授权重定向使用 HTTP 协议

Caution

网关返回的 OAuth 授权重定向 URL 使用的是 HTTP 而非 HTTPS Location: http://zfcg.czt.fujian.gov.cn/gp-auth-center/oauth/authorize?... 这意味着授权码在传输过程中以明文形式发送,容易被中间人攻击MITM截获。

  • 复现curl -sI https://zfcg.czt.fujian.gov.cn/gateway/gp-auth-center/rest/v2/login/captcha
  • 302 Location 指向 http:// 开头的 URL
  • 建议:强制所有 OAuth 流程使用 HTTPS,配置 HSTS 响应头

B-02接口路径高度可预测可枚举

  • 命名规范:所有微服务路径均遵循 gp-{业务名称} 格式
  • 枚举结果15 个已确认服务):
路径 HTTP 状态码 说明
/gateway/api/oauth 500 认证网关(异常暴露)
/gp-auth-center 302 身份认证中心
/gp-basic-data 403 基础数据服务
/gp-trade 403 电子交易
/gp-expert 403 专家抽取
/gp-agency 403 代理机构管理
/gp-complaint 403 投诉管理
/gp-integrity 403 诚信管理
/gp-frame 403 框架协议
/gp-esign 403 电签配置
/gp-supervise 403 监督预警
/gp-cms 403 内容管理
/gp-file 403 文件服务
/gp-workflow 403 工作流引擎
/gp-message 403 消息服务
  • 建议:在网关层返回统一的 404 而非 403403 确认了服务存在),增加请求频率限制

B-03网关未认证接口返回 500 并泄露堆栈

  • 现象/gateway/api/oauth/checkToken 返回 500 Internal Server Error
  • 响应头Content-Type: application/json,可能包含内部错误信息
  • 建议:未认证请求统一返回 401,不暴露内部错误

🟡 中危风险

B-04潜在越权风险IDOR/水平越权)

  • 机制:后端接口依赖前端传递的 tenantId(租户 IDuserId 进行数据隔离
  • 风险:若后端未对当前 Token 所属租户进行严格校验,攻击者可篡改 tenantId 访问其他机构数据
  • 建议:所有接口从 Token 声明中提取租户信息,禁止接受客户端传参覆盖

B-05OAuth 回调地址缺乏白名单校验

  • 302 响应redirect_uri 参数固定为 https://zfcg.czt.fujian.gov.cn:443/gateway/api/oauth/authorization_code_callback
  • 需确认后端是否严格校验 redirect_uri,防止开放重定向攻击
  • 建议:后端强制校验 redirect_uri 白名单

B-06Access-Control-Allow-Headers 配置过宽

  • 响应头Access-Control-Allow-Headers: *
  • 影响:允许任意跨域请求携带任意自定义头,增加 CSRF 攻击面
  • 建议:精确限制允许的 Headers 列表

四、服务器基础设施

4.1 服务器 IP 信息

项目
主站 IP移动线路 112.54.45.252(福建福州 中国移动)
主站 IP电信线路 120.35.30.176(福建福州 中国电信)
云端服务 IP 114.115.172.176(华为云 北京区域,用于签章和部分配置服务)
DNS 解析 本地代理 198.18.3.186,NS 指向 icloudv6.com
所属网段 CHINANET Fujian province network (218.85.0.0 - 218.86.127.255)
Web服务器 OpenResty (Nginx + Lua)

4.2 同域名/关联站点矩阵

站点地址 服务类型 说明
zfcg.czt.fujian.gov.cn 政府采购网主站 Vue.js SPA + 微前端聚合
czt.fujian.gov.cn 财政厅官网 上级主管部门门户
czpj.czt.fujian.gov.cn 财政评价系统 财政评价业务
ggzyfw.fujian.gov.cn 公共资源交易服务 专家库关联,可能共享 CA 体系
zwfw.rst.fujian.gov.cn 人社厅政务服务 通过相同 CA 体系关联登录
app.slt.fujian.gov.cn 政务移动端 关联移动入口
gov.govwza.cn 适老化服务 CDN 第三方无障碍访问脚本

4.3 开源组件与第三方服务清单

组件名称 版本 类型 风险等级
jQuery 1.12.4 开源 JS 库 🔴 高(已知 XSS CVE
Vue.js 2.x/3.x 前端框架 🟢
CKEditor 未知 富文本编辑器 🟡 中(历史 XSS 漏洞较多)
qrcode.min.js 未知 二维码生成 🟢
sm2.min.js V3.0.0.574 国密算法库 🟢 低(专用密码学库)
Udesk SaaS 在线客服 🟡 中(第三方脚本注入)
Kinggrid 金格 未知 电子签章 🟢 低(行业组件)
GEL 格尔CA 未知 数字证书 🟢

五、弱口令风险评估

🟡 中高危

W-01弱密码校验已被关闭

  • 配置证据isShowWeakPassword: false
  • 影响:允许用户设置和使用弱密码登录,攻击者可通过字典攻击暴力破解账户

W-02验证码强度不足

  • 类型静态图形验证码4-5 位字母数字混合)
  • 风险:易被 OCR 工具自动识别(本次评估中浏览器代理即自动识别通过)
  • 建议:采用滑动拼图验证码或行为验证(如极验 / 阿里云验证)

W-03缺乏登录失败锁定机制待确认

  • 观察:登录页面未见明显的错误次数限制提示
  • 风险:攻击者可无限制尝试不同密码组合
  • 建议:实施 5 次失败锁定 30 分钟 + 短信告警机制

W-04统一身份认证的连锁风险

  • 采购网与多个政务系统共享统一 CA/OAuth 认证体系
  • 一旦单点账户泄露,可能横向穿透到财政评价、公共资源交易等关联系统
  • 建议:关键业务操作强制 UKey / 短信双因子认证

六、风险总结矩阵

编号 风险点 严重程度 类型
F-01 JWT Token 明文多处存储 🔴 高危 前端
F-02 sessionStorage 明文存储 PII 🔴 高危 前端
F-03 错误日志泄露后端架构 🔴 高危 前端
F-04 配置文件暴露加密密钥 🟡 中危 前端
F-05 缺少 CSP 安全策略 🟡 中危 前端
F-06 弱密码校验被禁用 🟡 中危 前端
F-07 jQuery 版本过旧有 CVE 🟡 中危 前端
F-08 版本号暴露 🟢 低危 前端
B-01 OAuth 重定向使用 HTTP 🔴 高危 后端
B-02 接口路径可枚举 🟡 中危 后端
B-03 网关错误泄露内部信息 🟡 中危 后端
B-04 潜在 IDOR 越权风险 🟡 中危 后端
B-05 OAuth 回调白名单待确认 🟡 中危 后端
B-06 CORS Headers 配置过宽 🟡 中危 后端
W-01 弱密码校验关闭 🟡 中危 弱口令
W-02 验证码强度不足 🟡 中危 弱口令
W-03 缺乏登录失败锁定 🟡 中危 弱口令
W-04 统一认证连锁风险 🟡 中危 弱口令

高危4 项 / 中危12 项 / 低危2 项 / 总计18 项风险点


七、优先修复建议

立即修复P0

  1. OAuth 重定向强制使用 HTTPS + 配置 HSTS
  2. JWT Token 仅存放于 HttpOnly Cookie,移除 localStorage 存储
  3. 清除 sessionStorage 中的用户 PII 数据
  4. 生产环境关闭 errLog 写入 localStorage

尽快修复P1

  1. 配置 CSP 安全策略
  2. 启用弱密码校验(isShowWeakPassword: true
  3. 升级 jQuery 至 3.6+
  4. 接口返回统一 404 替代 403
  5. 收紧 CORS Access-Control-Allow-Headers

规划修复P2

  1. 引入行为验证码替代图形验证码
  2. 实施登录失败锁定机制
  3. 移除前端 config.js 中的密钥信息
  4. 移除 HTML data-tag 版本号标识