<HTML><BODY>А вот интересно, от ботов тоже будем требовать соблюдения RFC?<br>Я воспроизвел ситуацию, как создать бесполезную нагрузку на сервер при бесконечном редиректе.<br>Правильно я делаю запрос или нет - в данном случае не важно. Важно то, что оно работает, и у сервера нет встроенных средств для корректной обработки такой ситуации. По большому счету, это называется уязвимостью.<br>Дальше. господа разрабы, решать вам. Закрыть проблему или оставить все как есть и подождать, пока эту уязвимость начнут эксплуатировать.<br><br>Засим позволю себе откланяться, поскольку не имею времени продолжать бессмысленную дискуссию.<br>Спасибо.<br><br><br><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;">
        Понедельник,  7 августа 2017, 16:12 +03:00 от Валентин Бартенев <vbart@nginx.com>:<br>
        <br>
        <div id="">






















        












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

        
</div>


</div>
</blockquote>
<br></BODY></HTML>