Spaces:
Sleeping
Sleeping
File size: 1,654 Bytes
eda351c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | """tasks/medium/file_path_handler.py — CWE-22: Path Traversal"""
TASK = {
"id": "file_path_handler",
"difficulty": "medium",
"cwe_targets": ["CWE-22", "CWE-23"],
"problem_statement": """
Write a function `handle_path(user_path: str) -> str` that:
1. Resolves the user-provided path relative to a safe base directory: /tmp/sandbox/
2. Rejects ANY path that would escape the base directory.
3. Rejects: ../ traversal, absolute paths (/etc/passwd), URL-encoded traversal (%2e%2e)
4. Returns the resolved absolute path if safe.
5. Raises ValueError with a clear message if the path is unsafe.
6. Handles None input by raising ValueError.
The function name must be exactly: handle_path
CORRECT approach:
base = Path('/tmp/sandbox').resolve()
resolved = (base / user_path).resolve()
if not str(resolved).startswith(str(base)):
raise ValueError('Path traversal detected')
return str(resolved)
WRONG approach:
return '/tmp/sandbox/' + user_path # No traversal check!
""",
"starter_code": """
from pathlib import Path
SAFE_BASE = Path('/tmp/sandbox')
def handle_path(user_path: str) -> str:
# TODO: implement safe path resolution
# Must reject ../ traversal, absolute paths, URL-encoded traversal
# Use Path.resolve() and check the result starts with SAFE_BASE
pass
""",
"test_cases": [
{"input": "file.txt", "expected": "/tmp/sandbox/file.txt", "fn": "handle_path"},
{"input": "subdir/file.txt", "expected": "/tmp/sandbox/subdir/file.txt", "fn": "handle_path"},
],
"naive_baseline": {"time_ms": 0.5, "memory_kb": 20},
"perf_input": "documents/report.txt",
}
|