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:
@@ -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 ""
|
||||
|
||||
Reference in New Issue
Block a user