Merge PR #956: fix(security): prevent path traversal bypass via startswith check
This commit is contained in:
@@ -13,8 +13,11 @@ def _resolve_path(path: str, workspace: Path | None = None, allowed_dir: Path |
|
|||||||
if not p.is_absolute() and workspace:
|
if not p.is_absolute() and workspace:
|
||||||
p = workspace / p
|
p = workspace / p
|
||||||
resolved = p.resolve()
|
resolved = p.resolve()
|
||||||
if allowed_dir and not str(resolved).startswith(str(allowed_dir.resolve())):
|
if allowed_dir:
|
||||||
raise PermissionError(f"Path {path} is outside allowed directory {allowed_dir}")
|
try:
|
||||||
|
resolved.relative_to(allowed_dir.resolve())
|
||||||
|
except ValueError:
|
||||||
|
raise PermissionError(f"Path {path} is outside allowed directory {allowed_dir}")
|
||||||
return resolved
|
return resolved
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user