Я занимаюсь некоторыми исследованиями в отношении загрузки файлов с контролем доступа, используя Django. Моя цель - полностью заблокировать доступ к файлу, за исключением случаев, когда пользователь получает доступ к нему. Я читал, что при использовании Django X-Sendfile является одним из методов выбора для достижения этого (на основе других вопросов SO и т.д.). Мое рудиментарное понимание использования X-Sendfile с Django:
- Пользователь запрашивает URI для получения защищенного файла
- Приложение Django решает, какой файл будет возвращаться на основе URL-адреса, а также проверяет права пользователя и т.д.
- Приложение Django возвращает HTTP-ответ с заголовком "X-Sendfile", установленным на путь к файлу сервера.
- Веб-сервер находит файл и возвращает его реквестеру (я предполагаю, что веб-сервер также удаляет заголовок "X-Sendfile" ).
По сравнению с удалением файла непосредственно из Django, X-Sendfile, по-видимому, является более эффективным методом обеспечения защищенных загрузок (поскольку я могу полагаться на Nginx для работы с файлами, а также Django), но оставляет мне 2 вопроса:
- Является ли мое объяснение X-Sendfile хотя бы абстрактно правильным?
- Действительно ли это безопасно, предполагая, что я не предоставляю нормальный внешний интерфейс HTTP (например, http://www.example.com/downloads/secret-file.jpg) в каталог, который файл сохраняется (т.е. не хранить его в моей директории
public_html
)? Или, может ли технический специалист проверить заголовки и т.д. И перепроектировать способ доступа к файлу (чтобы потом распространить)? - Это действительно большая разница в производительности. Могу ли я запугать свой сервер приложений, предоставив 8b chunked загрузки файлов размером 150 МБ непосредственно из Django или это не проблема? Причина, по которой я спрашиваю, заключается в том, что, если обе версии близки, версия Django предпочтительнее из-за моей способности делать вещи на Python, например, регистрировать количество завершенных загрузок, пропускную способность загрузки и т.д.
Спасибо заранее.