Re: Об одной малоизвестной уязвимости в веб сайтах
Gena Makhomed
gmm at csdoc.com
Sun Jun 15 20:07:58 UTC 2014
On 14.06.2014 21:14, Maxim Dounin wrote:
>>>>>>>>>>>> http://habrahabr.ru/post/166855/
...
> Прокси-сервер, помимо всего прочего, является сервером, и
> процитированное требование вернуть 400 в ответ на "Host header
> field with an invalid field-value" - к нему тоже относится.
> Соответственно, если трактовать термин "invalid field-value" как
> включающий проверку не только синтаксиса, но и требований,
> предъявляемых к формированию заголовка Host клиентом, то
> требование "ignore the received Host header" теряет смысл.
Максим, теперь я понял, в чем была моя ошибка, спасибо!
> Теримн "field-value" расшифровывается в "3.2. Header Fields",
> http://tools.ietf.org/html/rfc7230#section-3.2:
>
> field-value = *( field-content / obs-fold )
>
> Соответственно invalid - это то, что не соответствует указанному
> синтаксису.
Понял, спасибо!
Но есть один не совсем понятный нюанс -
озвученные в 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).
- это ведь требования к синтаксису, которые обязательны для выполнения.
А вот что есть в RFC 7231:
http://tools.ietf.org/html/rfc7231#section-6.5.1
6.5.1. 400 Bad Request
The 400 (Bad Request) status code indicates that the server cannot or
will not process the request due to something that is perceived to be
a client error (e.g., malformed request syntax, invalid request
message framing, or deceptive request routing).
Следовательно, сервер имеет право вернуть 400 статус,
если получит запрос с разными authority component
в заголовке Host и в absolute Request URI ?
Кроме того, в разделе 5.5. Effective Request URI
http://tools.ietf.org/html/rfc7230#section-5.5
даже прямо говорят, что запрос может быть misdirected,
deliberately or accidentally, и что origin server должен
сам решить, обрабатывать такой запрос или нет, потому что
"it might indicate an attempt to bypass security filters,
trick the server into delivering non-public content,
or poison a cache."
именно это ведь и происходит в случае запроса
GET http://apple.com/ HTTP/1.1
Host: samsung.com
Разве ответить на такой запрос 400-м статусом не будет лучше?
--
Best regards,
Gena
Подробная информация о списке рассылки nginx-ru