Как я могу безопасно передать произвольно глубокий путь к веб-приложению (в данном случае - Flask)?

У меня есть форма, которая отправляет строку в мое приложение Flask при публикации формы. Строка - это путь к файлу, поэтому я хотел бы убедиться, что он не содержит ничего неприятного, например ../../../ etc / passwd . Werkzeug, который использует Flask, имеет удобную функцию под названием secure_filename , которая удаляет неприятные вещи из имен файлов. К сожалению, когда вводится полный путь, например templates / example.html , он преобразует / в _ , поэтому мы получаем templates_example.html .

Тогда кажется разумным разделить путь на уровни, поэтому я отправляю шаблоны и example.html отдельно, а затем снова объединяю их вместе на сервер. Это отлично работает, за исключением того, что путь может быть сколь угодно глубоким. Я мог бы просто связать вместе dir1 / dir2 / dir3 / dir4 и надеяться, что никто не пойдет глубже, чем dir4 , но это кажется глупым.

Как правильно проводить валидацию тропы неведомой глубины? Подтвердить иначе? Отправить данные иначе? По-другому закодировать путь, а затем декодировать его на сервере?

6
задан plaes 18 August 2011 в 21:03
поделиться