Re[2]: Зацикливание на редиректе

CoDDoC coddoc на mail.ru
Вт Авг 8 05:11:32 UTC 2017


А вот интересно, от ботов тоже будем требовать соблюдения RFC?
Я воспроизвел ситуацию, как создать бесполезную нагрузку на сервер при бесконечном редиректе.
Правильно я делаю запрос или нет - в данном случае не важно. Важно то, что оно работает, и у сервера нет встроенных средств для корректной обработки такой ситуации. По большому счету, это называется уязвимостью.
Дальше. господа разрабы, решать вам. Закрыть проблему или оставить все как есть и подождать, пока эту уязвимость начнут эксплуатировать.

Засим позволю себе откланяться, поскольку не имею времени продолжать бессмысленную дискуссию.
Спасибо.


>Понедельник,  7 августа 2017, 16:12 +03:00 от Валентин Бартенев <vbart на nginx.com>:
>
>On Monday 07 August 2017 15:26:11 CoDDoC wrote:
>> Ну, хорошо. Пусть в моем примере вообще нет хоста.
>> Тогда что такое  https://test.com ? Давайте назовем строкой запроса, суть 
>проблемы от этого не меняется.
>
>В вашем примере это аргумент командной строки, который не участвует в запросе.
>В строке запроса он не передается.
>
>
>> В документации так:
>> " $host
>>             в порядке приоритета: имя хоста из строки запроса, или имя хоста 
>из поля “Host” заголовка запроса.....,"
>> 
>> Объясните мне, пожалуйста, что понимать как "имя хоста из строки запроса" и 
>"имя хоста из поля “Host” заголовка запроса".
>> Желательно с примером для курла, как особо одаренному.
>
>Что такое строка запроса описано в RFC:
>https://tools.ietf.org/html/rfc7230#section-3.1.1
>
>Пример с curl:
>
>$ curl -ILH 'Host:  www.nginx.org ' -x  http://nginx.org:80/ http://nginx.org/
>
>
>> 
>> Далее, Вы приводите пример с netcat. Аналогично можно использовать telnet.
>> Только ведь после получения Location ему нужно следовать. Полученный 
>Location:  http://nginx.org/ куда возвращает? На HEAD  http://nginx.org/
>HTTP/1.1.
>
>Первый пример netcat как раз содержит  http://nginx.org/ в строке запроса
>и как вы можете наблюдать - редиректа нет.
>
>Второй пример не содержит в строке запроса хоста, а в заголовке Host
>содержится  www.nginx.org и происходит редирект.
>
>
>> 
>> То же самое, только не вводить построчно:
>> 
>> curl -ILH 'Host:  www.nginx.org '  https://nginx.org/
>> 
>> И точно такое же зацикливание.
>
>В данном случае отправляет запрос только с  www.nginx.org в заголовке Host
>и отсутствием хоста в строке запроса.  Так работает curl.
>
>Зацикливания происходит только потому, что вы сами заставили curl
>постоянно отправлять запрос с Host:  www.nginx.org , о чем предупреждает
>документация:
>
>
>man curl:
>
>       -H, --header <header>
>
>              WARNING: headers set with this option will be set in
>              all requests - even after  redirects  are  followed,
>              like when told with -L, --location. This can lead to
>              the header being sent to other hosts than the origi‐
>              nal  host,  so sensitive headers should be used with
>              caution combined with following redirects.
>
>
>
>Если вы укажите заголовок Host так, как это правильно для curl,
>то никаких проблем нет:
>
> curl -IL  https://www.nginx.org/
>
>
>> Пусть мои примеры неверны. Но работают, и приводят к зацикливанию при 
>псевдо-валидном запросе.
>
>Ваши примеры демонстрируют неправильное использование команды curl,
>о чем вас предупреждает документация.
>
>> По большому счету, меня интересует только, как это побороть.
>> 
>
>Использовать curl правильно.
>
>--
>Валентин Бартенев
>_______________________________________________
>nginx-ru mailing list
>nginx-ru на nginx.org
>http://mailman.nginx.org/mailman/listinfo/nginx-ru

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20170808/b328ade8/attachment.html>


Подробная информация о списке рассылки nginx-ru