LINUX.ORG.RU

безопасный парсинг длинных запросов

 bottly.py,


0

1

Я чем-нить рискую делая вот так:

page = int(request.query.get('page',0))

?

Может хакер очень длинный запрос передаст или ещё что. Может ли это выжрать память или проц?

У меня фронтенд nginx который всё равно запрос более 8к не примет (настройка по-дефолту). Преобразовать строку такой длинны в int не проблема (проверял). Но может есть другие подобные атаки?

★★★★★

Внимательно изучи класс BaseRequest, во первых и для post и для get запросов есть ограничения

#: Maximum size of memory buffer for :attr:`body` in bytes. MEMFILE_MAX = 102400 #: Maximum number pr GET or POST parameters per request MAX_PARAMS = 100

Как видишь параметры можно менять в нужную сторону.

Всю остальную защиту как то валидацию post переменных берешь на себя, например можно использовать для парсинга и валидации форм - wtforms

P.S Да еще забыла про отправку через форму больших файлов, это можешь тоже сам вручную проверять в обработчике размер , если превышен отклонять.

yanka ★★
()
Ответ на: комментарий от yanka

Спасибо за помощь.

А есть ли эффективный способ работать с большими файлами? Ну чтобы они, например, сразу на диск складывались, а не в памяти хранились пока их не заберут. Интересует возможность в связке с nginx.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от xpahos

На самом деле так и задумано. Нет смысла отлавливать этот эксепшн чтобы делать raise какого-то другого эксепшена в функции без сайд-эффектов. Т.е. смысла в таком коде я не вижу:

try:
  ..
except ValueError:
  raise HTTPError(400, "bad request")

Но я поставлю коммент в коде, спасибо.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Не обязательно raise. Можно, например, на какую-нибудь дефолтную страницу перекинуть пользователя (с опциональным сообщением об ошибке).

winlook38 ★★
()
Ответ на: комментарий от true_admin

А ты обрати внимание как идет парсинг post запроса в bottle ,если размер запроса превышает значение параметра MEMFILE_MAX, то открывается временный файл и туда пишется тело запроса. В памяти больше MEMFILE_MAX не будет хранится. (метод _body )

Другое дело, если ты хочешь ограничить размер файлов которые готов принимать твой сервер, это уже надо сделать на уровне обработчика и проверить размер пришедшего файла и как верно сказал xpahos оберни в эксепшен ...

Еще раз совет, иногда просматривай код изнутри, полезно... И хорошая тренировка)))

yanka ★★
()
Ответ на: комментарий от yanka

спасибо. Почему-то был уверен что нужного функционала там нет, поэтому даже не стал смотреть.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

Я не знаю как отлавливает эксепшоны bottle, но лучше такие места закрывать эксепшонами, которые в продакшене смогут правильно отрабатывать. Я обычно в Pyramid HTTPNotFound отдаю в таком случае.

xpahos ★★★★★
()
Ответ на: комментарий от xpahos

Это извращение, выплевывать 404, когда нужно говорить 400. true_admin все правильно говорил, а ты - нет.

anonymous
()
Ответ на: комментарий от true_admin

только если ты кастомизируешь страницы об ошибках. изначально у тебя все было верно (эксепшен с 400)

anonymous
()
Ответ на: комментарий от anonymous

Это извращение, выплевывать 404, когда нужно говорить 400. true_admin все правильно говорил, а ты - нет.

почему неправильно? Конечному пользователю без разницы какая ошибка будет видна, а у меня отдается все равно не стандартная страничка с надписью.

xpahos ★★★★★
()
Ответ на: комментарий от xpahos

Конечному пользователю без разницы

конченному пользователю и разработчику может и без разницы, а вот технически одаренному - нет. Ну у вас позиция быдлокодера, честное слово.

anonymous
()
Ответ на: комментарий от anonymous

конченному пользователю и разработчику может и без разницы, а вот технически одаренному - нет. Ну у вас позиция быдлокодера, честное слово.

так а в чем позиция быдлокодера? Что даст эта страничка технически одаренному? :)

xpahos ★★★★★
()
Ответ на: комментарий от xpahos

Технически одаренный потом задолбает саппорт :))))

А вообще термин отличный - «технически одаренный пользователь»

boombick ★★★★★
()
Ответ на: комментарий от boombick

Технически одаренный потом задолбает саппорт :))))

лучше 404, вопросов меньше будет :)

xpahos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.