Re: Об одной малоизвестной уязвимости в веб сайтах
Maxim Dounin
mdounin at mdounin.ru
Tue Jun 17 06:30:46 UTC 2014
Hello!
On Mon, Jun 16, 2014 at 11:20:57PM +0300, Gena Makhomed wrote:
> On 16.06.2014 15:00, Maxim Dounin wrote:
>
> >>озвученные в RFC 7230 требования к клиенту:
> >>
> >>http://tools.ietf.org/html/rfc7230#section-5.4
> >>
> >> A client MUST send a Host header field in all HTTP/1.1 request
> >> messages. If the target URI includes an authority component, then a
> >> client MUST send a field-value for Host that is identical to that
> >> authority component, excluding any userinfo subcomponent and its "@"
> >> delimiter (Section 2.7.1).
> >>
> >>- это ведь требования к синтаксису, которые обязательны для выполнения.
> >
> >Нет, это не требования к синтаксису, это требования к семантике.
>
> Запись target URI в виде valid request message - это разве не syntax?
Синтаксис - это то, что нарушает требования приведённых нормативных
грамматик, см. http://tools.ietf.org/html/rfc7231#section-1.2 и
далее.
[...]
> >>Разве ответить на такой запрос 400-м статусом не будет лучше?
> >
> >Это зависит от многих факторов. Вот тут Валентин давеча
> >напрограммировал возврат 400, если имя, указанное в SNI, не
> >совпадало с именем, используемым в запросе, ибо RFC 6066 говорит:
> >
> > ... If the server_name is
> > established in the TLS session handshake, the client SHOULD NOT
> > attempt to request a different server name at the application layer.
> >
> >Так пришлось распрограмировать обратно - потому что Chrome
> >использует "a different server name at the application layer",
> >когда считает нужным/возможным.
>
> "SHOULD NOT" - это не запрет, а только лишь рекомендация:
> http://tools.ietf.org/html/rfc2119#section-4
> так что формально и фактически Chrome ничего не нарушает.
Фактически - упомянутый "SHOULD NOT" на тот момент безусловно
отклонялся Apache'ом, а противоречащие друг другу Host +
Request-Line - формально вообще ничего не нарушали до выхода
HTTPbis. И что на самом деле происходит в реальной жизни - это
отдельный интересный вопрос.
Среди прочего, например, HTTPbis явно требует возвращать 400, если
запрос содержит несколько заголовков Host. В своё время, однако,
nginx'у потребовалось от этой практики отказаться:
http://hg.nginx.org/nginx/rev/b9de93d804ea
Если мне не изменяет память, причина была всё та же - реальная
жизнь заставила.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru