17 lines
681 B
Python
17 lines
681 B
Python
"""safe_name — санитизация имени файла (защита от path traversal)."""
|
|
|
|
|
|
def safe_name(name: str) -> str:
|
|
"""Санитизировать имя файла: защита от path traversal, сохраняя подпапки.
|
|
|
|
Запрещает '..' и абсолютные пути; нормализует слэши. Возвращает "" если
|
|
имя пустое или небезопасное.
|
|
"""
|
|
if not name:
|
|
return ""
|
|
name = name.replace("\\", "/")
|
|
parts = [p for p in name.split("/") if p and p != "."]
|
|
if not parts or any(p == ".." for p in parts):
|
|
return ""
|
|
return "/".join(parts)
|