Использование Tomcat или Spring для проверки правильности установки заголовка длины содержимого в запросе

В более широком контексте мы хотели бы ограничить размер сообщений, которые клиент может отправлять на сервер с помощью HTTP-запроса.

Я хотел бы сделать это, используя длину содержимого заголовка http. Поэтому мне не нужно читать все тело, просто проверьте этот заголовок и отклоните запрос, если длина содержимого слишком велика, также отклоните, если длина содержимого отсутствует (код ошибки http 411)

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

Вопрос в том, проверяет ли Tomcat или Spring MVC (мой стек), действительно ли длина содержимого соответствует реальному размеру тела сообщения?

(Это должно быть довольно легко реализовать с помощью фильтра, просто интересно, не работает ли контейнер сервлета или сервлет диспетчера Spring как это из коробки.)


person csviri    schedule 18.05.2016    source источник
comment
Я думаю, что метод фильтрации будет подходящим вариантом - это немного специализированный вариант использования, и ни Tomcat, ни Spring не делают этого по умолчанию.   -  person stdunbar    schedule 18.05.2016
comment
Не забывайте, что существует кодирование фрагментированной передачи   -  person Ilya    schedule 18.05.2016
comment
Если нет, то обязательно должно. Возможный вектор атаки DDOS.   -  person christopher    schedule 19.05.2016
comment
Thx @Ilya - здесь мы будем автоматически отклонять запросы с фрагментами.   -  person csviri    schedule 19.05.2016
comment
@stdunbar - Мой вариант использования особенный, однако в целом это можно сделать, чтобы проверить, действительно ли тело сообщения имеет размер, указанный в content-lenght, в любом случае, если вы поместите его в качестве ответа, я принимаю его, спасибо!   -  person csviri    schedule 19.05.2016
comment
@christopher, да, согласен, мы намерены предотвратить это.   -  person csviri    schedule 19.05.2016
comment
Нашел это, что связано, но не решает проблему: stackoverflow.com/questions/14075287/   -  person csviri    schedule 20.05.2016


Ответы (1)


Tomcat справится с этим.

Проведя несколько тестов в простом веб-приложении с кейсами:

  1. Если content-lenght отсутствует, он будет читать 0 байтов из содержимого.
  2. Если у нас есть более длинный контент, чем указано в заголовке content-lenght, со значением keep-alive true, то после прочтения тела размера content lenght он попытается обработать оставшееся тело как новый запрос (и завершится ошибкой с неверным запросом. )
  3. в той же ситуации, что и в пункте 2, просто сохранение активности является ложным, мы все равно будем получать тело длины, как в заголовке длины содержимого.
person csviri    schedule 09.08.2016
comment
можете ли вы указать на документы или источник, показывающие, как / где Tomcat обрабатывает это? Благодарность - person Justin; 24.12.2017
comment
Я не искал его в исходном коде, я просто тестировал его с помощью nc и других необычных инструментов командной строки. - person csviri; 03.01.2018
comment
Как насчет того, чтобы контент был меньше, чем content-length? - person Glenn Bech; 18.01.2018
comment
Недавно не пробовал, наверное будет блокировка ждать данных - person csviri; 12.02.2018