forked from wangziqi/gongxue-base
feat: add external asset security scanner
This commit is contained in:
@@ -948,7 +948,14 @@ GET /api/tenant-content/assets/security-scan-events?assetId=<assetId>&limit=100
|
||||
|
||||
`GET /api/tenant-content/assets` 和学生端 `GET /api/catalog/assets` 都会返回 `securityScanStatus`。前端可以展示状态,但最终能否下载、预览、播放仍以后端签名接口为准。
|
||||
|
||||
生产环境会定时运行 assets worker 复检对象存储元数据并执行内置 `metadata_rules` 安全扫描。复检发现对象丢失、跨租户 objectKey、大小/MIME/checksum 不一致时,后端会把资源置为 `uploadStatus=failed`、`securityScanStatus=skipped` 并从 `active` 退回 `draft`,同时写入 `securityFlags.assetRecheckFailed=true`。扫描发现 MIME 不允许、扩展名/MIME 不匹配等问题时,会把资源置为 `securityScanStatus=failed`,并写入 `securityFlags.assetSecurityScanFailed=true`。租户后台资源列表应对 failed/skipped 资源展示异常原因和重新上传入口;学生端不要缓存资料列表和签名 URL 作为长期状态。
|
||||
生产环境会定时运行 assets worker 复检对象存储元数据并执行内置 `metadata_rules` 安全扫描;上线配置应启用 `WORKER_ASSET_SECURITY_SCANNER=metadata_rules,http`,由 worker 调用外部 HTTP 杀毒/内容安全服务。复检发现对象丢失、跨租户 objectKey、大小/MIME/checksum 不一致时,后端会把资源置为 `uploadStatus=failed`、`securityScanStatus=skipped` 并从 `active` 退回 `draft`,同时写入 `securityFlags.assetRecheckFailed=true`。扫描发现 MIME 不允许、扩展名/MIME 不匹配、外部 scanner 判定风险,或外部 scanner 不可用且 fail-closed 时,会把资源置为 `securityScanStatus=failed`,并写入 `securityFlags.assetSecurityScanFailed=true`。
|
||||
|
||||
前端处理规则:
|
||||
|
||||
- 租户后台资源列表应展示 `securityScanStatus=pending/scanning/failed/skipped/passed`,其中 `failed/skipped` 展示异常原因和重新上传入口。
|
||||
- 租户后台不能用前端状态绕过发布;即使 UI 显示处理中,发布/下载/预览仍以后端接口返回为准。
|
||||
- 学生端不要缓存资料列表和签名 URL 作为长期状态;每次预览/下载/播放前重新请求后端签名。
|
||||
- 前端不调用外部扫描服务,也不接触 scanner endpoint/token;扫描证据只通过 `GET /api/tenant-content/assets/security-scan-events` 给后台排查。
|
||||
|
||||
## 考试倒计时、签到积分和反馈
|
||||
|
||||
|
||||
Reference in New Issue
Block a user