Как вы ограничиваете загрузку больших файлов в wsgi? - PullRequest
4 голосов
/ 23 января 2012

Я пытаюсь получить представление о лучшем способе безопасной загрузки файлов в приложении wsgi.Кажется, что многие решения включают использование FieldStorage из модуля cgi для анализа данных формы.Из того, что я понимаю о FieldStorage, он выполняет некоторую «магию» за кулисами, передавая данные в временный файл.

Я не на 100% уверен в том, как ограничить запрос, содержащий файл больше, чемуказанная сумма (скажем, 10 МБ).Если кто-то загружает файл размером несколько ГБ, вы, очевидно, захотите заблокировать запрос до того, как он начнет прожирать дисковое пространство вашего сервера, верно?

Каков наилучший способ ограничения загрузки файлов в приложении wsgi?

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Это будет зависеть от вашего сервера переднего плана. Если у него есть какая-либо конфигурация для блокировки большого запроса даже до того, как он поступит в ваше приложение, используйте его.

Если вы хотите заблокировать это своим кодом, я вижу два подхода:

  • Посмотрите, есть заголовок HTTP длины содержимого. Если он больше, чем вы можете обработать, немедленно отклоните запрос.
  • Не доверяйте заголовкам и начинайте читать тело запроса, пока не достигнете своего предела. Обратите внимание, что это не очень умный способ, но может работать. =)

Доверие к заголовку HTTP может привести к некоторым проблемам. Предположим, кто-то отправляет запрос с Content-Length: 1024, но отправляет тело запроса объемом 1 ГБ. Если ваш интерфейсный сервер доверяет заголовку, он начнет читать этот запрос и позже узнает, что тело запроса на самом деле намного больше, чем должно быть. Эта ситуация все еще может заполнить ваш серверный диск, даже будучи запросом, который «проходит» «слишком большую проверку».

Хотя это может произойти, я думаю, что доверие к Заголовку было бы хорошей отправной точкой.

0 голосов
/ 23 января 2012

Вы можете использовать функции сервера HTTP, которые вы, вероятно, имеете перед вашим приложением WSGI.Например, lighttpd имеет много опций для формирования трафика .

...