Path Traversal (обход каталога)
Чтение файлов вне разрешённой папки через последовательности вроде ../ в пути.
Сигнатура
Path Traversal / Directory TraversalPath Traversal возникает, когда имя файла берётся из ввода и используется без проверки. Последовательностями ../ атакующий выходит за пределы рабочей папки и читает системные файлы (например /etc/passwd).
Как защититься: нормализуйте путь и убедитесь, что он находится внутри разрешённого каталога; используйте белый список имён; не передавайте сырой ввод в файловые функции.
import os
BASE = "/var/www/files"
def read_file(name):
full = os.path.realpath(os.path.join(BASE, name))
# Проверяем, что результат внутри BASE
if not full.startswith(BASE + os.sep):
raise Forbidden("Недопустимый путь")
with open(full) as f:
return f.read()