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 ""
|
||||
|
||||
@@ -24,6 +24,10 @@ def _now_iso() -> str:
|
||||
return datetime.now(timezone.utc).isoformat(timespec="seconds")
|
||||
|
||||
|
||||
# 抽样用系统级随机源(CSPRNG)
|
||||
_SYSTEM_RANDOM = random.SystemRandom()
|
||||
|
||||
|
||||
_SCHEMA = """
|
||||
CREATE TABLE IF NOT EXISTS reviews (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
@@ -69,11 +73,14 @@ class ReviewQueue:
|
||||
def should_enqueue(tags: List[str], sample_rate: float = 0.10,
|
||||
force_tags: Optional[List[str]] = None,
|
||||
rng: Optional[random.Random] = None) -> bool:
|
||||
"""是否应入队:tags 命中 force_tags 强制;否则按 sample_rate 抽样。"""
|
||||
"""是否应入队:tags 命中 force_tags 强制;否则按 sample_rate 抽样。
|
||||
|
||||
缺省用系统级 CSPRNG(不可预测,不可被时间种子影响抽样公平性)。
|
||||
"""
|
||||
force = force_tags or []
|
||||
if any(t in force for t in tags):
|
||||
return True
|
||||
rng = rng or random.Random()
|
||||
rng = rng or _SYSTEM_RANDOM
|
||||
return rng.random() < sample_rate
|
||||
|
||||
# ---------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user