fix(v3): T30 安全加固(Mimosa 深度扫描驱动)

- 路径参数 ID 白名单(runs/agent/sessions),杀灭 Windows 反斜杠穿越(..%5C 直读 .env)
- artifacts 端点关押 + pipeline 工件名消毒(模型输出名剥路径成分)
- /llama/download dest 关押 models/ 内 + URL 协议白名单(先于 HF 别名转换)
- GET /config architect.api_key 打码(api_key_set + 前 6 位),PUT 空串=保留
- TrustedHostMiddleware 信任围栏(GATEWAY_TRUSTED_HOSTS 可覆盖)+ __main__ 默认 127.0.0.1
- review 抽样改 CSPRNG
- 新增 tests/test_security_hardening.py(13 项,全部离线)
This commit is contained in:
tzt
2026-09-02 00:01:33 +08:00
parent ddef8bec1c
commit ce3ba44de3
6 changed files with 236 additions and 5 deletions
+10 -1
View File
@@ -25,6 +25,14 @@ from .worker import WorkerLoop
from .workspace import Workspace
def _safe_artifact_name(name: str) -> str:
"""工件名单消毒:剥路径成分,只留文件名(工件名来自模型输出,防 ../ 越界写盘)。"""
part = str(name or "").replace("\\", "/").split("/")[-1].strip()
if not part or part in (".", ".."):
return "artifact.bin"
return part[:120]
@dataclass
class PipelineResult:
"""v2 协作管线一次运行的结果。"""
@@ -289,12 +297,13 @@ class CollaborativePipeline:
def _save_artifact(self, request_id: str, name: str, text: str) -> None:
if not text:
return
name = _safe_artifact_name(name)
d = self.run_dir / request_id / "artifacts"
d.mkdir(parents=True, exist_ok=True)
(d / name).write_text(text, encoding="utf-8")
def _read_artifact(self, request_id: str, name: str) -> str:
p = self.run_dir / request_id / "artifacts" / name
p = self.run_dir / request_id / "artifacts" / _safe_artifact_name(name)
if p.exists():
return p.read_text(encoding="utf-8")
return ""