У меня есть форма, которая отправляет строку в мое приложение Flask при публикации формы. Строка - это путь к файлу, поэтому я хотел бы убедиться, что он не содержит ничего неприятного, например ../../../ etc / passwd
. Werkzeug, который использует Flask, имеет удобную функцию под названием secure_filename
, которая удаляет неприятные вещи из имен файлов. К сожалению, когда вводится полный путь, например templates / example.html
, он преобразует /
в _
, поэтому мы получаем templates_example.html
.
Тогда кажется разумным разделить путь на уровни, поэтому я отправляю шаблоны
и example.html
отдельно, а затем снова объединяю их вместе на сервер. Это отлично работает, за исключением того, что путь может быть сколь угодно глубоким. Я мог бы просто связать вместе dir1 / dir2 / dir3 / dir4
и надеяться, что никто не пойдет глубже, чем dir4
, но это кажется глупым.
Как правильно проводить валидацию тропы неведомой глубины? Подтвердить иначе? Отправить данные иначе? По-другому закодировать путь, а затем декодировать его на сервере?