""" SecureCodeEnv Task: Input Sanitizer Difficulty: Easy CWE Targets: CWE-20 (Improper Input Validation), CWE-116 (Improper Encoding/Escaping) """ TASK = { "id": "easy_input_sanitizer", "difficulty": "easy", "cwe_targets": ["CWE-20", "CWE-116"], "component_name": "InputSanitizer", "filename": "src/utils/input_sanitizer.py", "problem_statement": """Write two Python functions: 1. `sanitize_html(user_input: str) -> str` Escapes HTML special characters to prevent XSS. Must escape: < > & " ' (to < > & " ') Must handle None input (return empty string). 2. `sanitize_filename(filename: str) -> str` Makes a filename safe to use on the filesystem. Must: strip path separators (/ \\ ..), allow only alphanumeric, dots, dashes, underscores. Must reject empty filenames (return 'unnamed'). Must truncate to 255 characters. Do NOT use eval(), exec(), or os.system(). Do NOT trust any input.""", "starter_code": '''def sanitize_html(user_input: str) -> str: # TODO: Escape HTML properly return user_input def sanitize_filename(filename: str) -> str: # TODO: Make filename safe return filename ''', "test_cases": [ {"fn": "sanitize_html", "input": [""], "expected_not_contains": [""], "description": "XSS script tag escaped"}, {"fn": "sanitize_html", "input": [''], "expected_not_contains": [" str: """Escapes HTML special characters to prevent XSS.""" if user_input is None: return "" return html.escape(str(user_input), quote=True) def sanitize_filename(filename: str) -> str: """Returns a filesystem-safe filename.""" if not filename: return "unnamed" # Remove path separators and traversal sequences filename = re.sub(r'[\\\\/]', '_', filename) filename = filename.replace('..', '') # Keep only safe characters filename = re.sub(r'[^a-zA-Z0-9._\\-]', '_', filename) filename = filename.strip('._') if not filename: return "unnamed" return filename[:255] ''', }