mirror of
https://github.com/hpd840321/starRiverProperty.git
synced 2026-06-09 08:20:31 +08:00
7b2bd307f1
- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.) - frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts - scripts/: build, test-env, tools (Docker Compose, service templates, API parity) - docs/: AGENTS.md, superpowers specs, architecture docs - .gitignore: standard Java/Maven exclusions Moved from legacy maven-*/ root layout to backend/ organized structure.
141 lines
4.3 KiB
Markdown
141 lines
4.3 KiB
Markdown
# 访客接口无鉴权调用评估与生产快测方案
|
||
|
||
## 1. 目标
|
||
|
||
- 基于生产日志评估“无鉴权调用访客接口”的真实边界。
|
||
- 给出生产可执行的快测方案,验证访客楼层策略是否生效。
|
||
- 通过脚本同时支持:
|
||
- `auth`:标准鉴权验证(正式验收路径)
|
||
- `noauth-probe`:无鉴权探测(安全风险判定,不作业务通过依据)
|
||
|
||
## 2. 日志证据与边界结论
|
||
|
||
日志来源:
|
||
|
||
- `maven-cw-elevator-application/logs/访客相关接口日志分析/日志分析/访客调用楼层放开接口清单.md`
|
||
- `maven-cw-elevator-application/logs/访客相关接口日志分析/日志分析/10.0.22.209/202604301713/logs/elevator-app.log`
|
||
|
||
关键证据:
|
||
|
||
- 文档中同时存在“JWT 调用”和“无鉴权(username)调用”样本。
|
||
- 但同批日志中的 `PersonRuleServiceImpl:196` 记录可见 `CloudwalkCallContext` 已包含:
|
||
- `company.companyId`
|
||
- `user.callerName`
|
||
- 部分请求带 `ext.value.authorization`(JWT 场景)
|
||
|
||
边界判定:
|
||
|
||
1. 观察到的“无 Authorization header”不能直接等价为“外部匿名可裸调”。
|
||
2. 更可能是平台或网关已注入上下文后触发的内部调用路径。
|
||
3. 生产对外验证必须以 `auth` 模式为准。
|
||
4. `noauth-probe` 仅用于探测当前网关/应用是否放开了不应放开的入口。
|
||
|
||
## 3. 快测脚本与模式
|
||
|
||
脚本路径:
|
||
|
||
- `maven-cw-elevator-application/tools/visitor_floor_verification/scripts/quick_verify_visitor_floor_policy.py`
|
||
|
||
### 3.1 auth 模式(正式)
|
||
|
||
三步调用:
|
||
|
||
1. `POST /component/person/detail`
|
||
2. `POST /elevator/person/add/visitor`
|
||
3. `POST /elevator/passRule/image`
|
||
|
||
请求头采用 `ELEVATOR_HEADER_*`(authorization/loginid/platformuserid/applicationid)+ `businessid`。
|
||
|
||
### 3.2 noauth-probe 模式(探测)
|
||
|
||
- 仅发送 `Content-Type`,可选附加 `businessid`。
|
||
- 不发送 Authorization、loginid、platformuserid、applicationid。
|
||
- 输出状态码/业务码用于判定“是否存在风险放开”。
|
||
|
||
## 4. 结果分级规则
|
||
|
||
### 4.1 auth 模式
|
||
|
||
- 通过:
|
||
- 三步 HTTP 均成功返回;
|
||
- `add/visitor` 业务成功,或返回 `76260532`(交集为空,预期失败);
|
||
- `passRule/image` 返回可解析数据。
|
||
- 失败:
|
||
- HTTP 4xx/5xx、超时、响应不可解析;
|
||
- 关键业务码异常且不属于 `76260532`。
|
||
|
||
### 4.2 noauth-probe 模式
|
||
|
||
- 预期拦截(正常):
|
||
- 返回 401/403,或明确鉴权失败业务码。
|
||
- 安全异常(高风险):
|
||
- 返回 2xx 且业务成功(特别是 `add/visitor` 成功)。
|
||
- 待排查:
|
||
- 返回 2xx 但业务失败且错误语义不清晰,需要结合网关策略判断。
|
||
|
||
## 5. 运行方式
|
||
|
||
先准备头信息(auth 模式):
|
||
|
||
```bash
|
||
cd maven-cw-elevator-application/tools/visitor_floor_verification
|
||
python3 -m pip install -r requirements.txt
|
||
|
||
export ELEVATOR_HEADER_AUTHORIZATION='Bearer <TOKEN>'
|
||
export ELEVATOR_HEADER_LOGINID='<LOGIN_ID>'
|
||
export ELEVATOR_HEADER_PLATFORMUSERID='<PLATFORM_USER_ID>'
|
||
export ELEVATOR_HEADER_APPLICATIONID='<APPLICATION_ID>'
|
||
```
|
||
|
||
也可使用模板文件:
|
||
|
||
- `maven-cw-elevator-application/tools/visitor_floor_verification/.env.quick_verify.example`
|
||
|
||
例如:
|
||
|
||
```bash
|
||
set -a
|
||
source .env.quick_verify
|
||
set +a
|
||
```
|
||
|
||
auth 模式(正式验收):
|
||
|
||
```bash
|
||
python3 scripts/quick_verify_visitor_floor_policy.py \
|
||
--mode auth \
|
||
--org-base-url "http://<ORG_HOST>:<ORG_PORT>" \
|
||
--elevator-base-url "http://<ELEVATOR_HOST>:<ELEVATOR_PORT>" \
|
||
--meng-person-id "<MENG_HAI_WEN_PERSON_ID>" \
|
||
--visitor-person-id "<TEST_VISITOR_PERSON_ID>" \
|
||
--business-id "2524639890ba4f2cba9ba1a4eeaa4015" \
|
||
--strict-name-check
|
||
```
|
||
|
||
noauth-probe 模式(可选一次):
|
||
|
||
```bash
|
||
python3 scripts/quick_verify_visitor_floor_policy.py \
|
||
--mode noauth-probe \
|
||
--org-base-url "http://<ORG_HOST>:<ORG_PORT>" \
|
||
--elevator-base-url "http://<ELEVATOR_HOST>:<ELEVATOR_PORT>" \
|
||
--meng-person-id "<MENG_HAI_WEN_PERSON_ID>" \
|
||
--visitor-person-id "<TEST_VISITOR_PERSON_ID>" \
|
||
--business-id "2524639890ba4f2cba9ba1a4eeaa4015" \
|
||
--probe-with-businessid
|
||
```
|
||
|
||
## 6. 报告与留痕
|
||
|
||
脚本输出:
|
||
|
||
- 控制台摘要(模式、三步状态、业务码、风险级别)
|
||
- 报告文件:`report/quick-verify-<timestamp>.json`
|
||
|
||
建议归档:
|
||
|
||
- 本次执行命令
|
||
- 报告 JSON
|
||
- 对应时段接口日志摘录
|
||
- 最终分级(通过 / 预期拦截 / 高风险)
|