Re: 400 Bad Request при http:// в Host

Валентин Бартенев vbart at nginx.com
Fri Sep 5 12:27:33 UTC 2014


On Friday 05 September 2014 07:53:52 kilgur wrote:
> Валентин Бартенев Wrote:
> -------------------------------------------------------
> > Вы цитируете устаревший RFC, да ещё часть про роутинг, а не про
> > корректность.
> > 
> > На самом деле: http://tools.ietf.org/html/rfc7230#section-5.4
> > 
> >    A server MUST respond with a 400 (Bad Request) status code to any
> >    HTTP/1.1 request message that lacks a Host header field and to any
> >    request message that contains more than one Host header field or a
> >    Host header field with an invalid field-value.
> 
> А если у меня nginx является фронтэндом к локальному апачу, он считается
> "прокси"? :)

Не считается.  Что такое "proxy" четко определено в том же RFC.

   A "proxy" is a message-forwarding agent that is selected by the
   client, usually via local configuration rules, to receive requests
   for some type(s) of absolute URI and attempt to satisfy those
   requests via translation through the HTTP interface.

Под прокси в данном случае понимается исключительно forward proxy,
который прописывается на клиенте.

Nginx не предназначен, и никогда не был, для использования в качестве
forward proxy.


> 
> When a proxy receives a request with an absolute-form of
>    request-target, the proxy MUST ignore the received Host header field
>    (if any) and instead replace it with the host information of the
>    request-target.  A proxy that forwards such a request MUST generate a
>    new Host field-value based on the received request-target rather than
>    forward the received Host field-value.

Это относится к роутингу.  Ignore тут касается роутинга запроса, а не
его валидности.  Всё это не отменяет того, что значение в заголовке должно
быть при этом валидно с точки зрения заголовка.

> 
> 
> > > Есть какая-либо возможность настроить nginx так, чтобы он не выдавал
> > ошибку
> > > 400?
> > 
> > Нет.
> > 
> Очень негибко...
> Я уже собрал nginx с поддержкой lua - проверить, передает ли nginx заголовки
> в header_filter_by_lua ДО отказа клиенту... ан нет, не вышло...
> Остается только исходники nginx'а править?
> 

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

Фильтрация "/" в первую очередь необходима для того, чтобы через Host 
злоумышленник не имел возможности пробрасывать пути к файлам и директориям.

--
Валентин Бартенев


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