nginx-0.7.15
Maxim Dounin
mdounin at mdounin.ru
Wed Sep 10 15:19:53 MSD 2008
Hello!
On Wed, Sep 10, 2008 at 09:21:15AM +0400, Igor Sysoev wrote:
>On Tue, Sep 09, 2008 at 11:31:13PM +0400, Maxim Dounin wrote:
>
>> On Mon, Sep 08, 2008 at 12:40:29PM +0400, Igor Sysoev wrote:
>>
>> >Изменения в nginx 0.7.15
>> >08.09.2008
>>
>> [...]
>>
>> > *) Добавление: теперь nginx разрешает подчёркивания в именах строк в
>> > заголовке запроса клиента.
>>
>> BTW, в результате конструкция вида
>>
>> proxy_set_header X-Permit-Something "OK";
>>
>> (где OK или нет определяется скажем из ip-адреса клиента) с
>> последующей проверкой на бекенде в cgi-скрипте под Apache
>> как-нибудь вроде
>>
>> if ($ENV{HTTP_X_PERMIT_SOMETHING} eq 'OK') {
>> ...
>> }
>>
>> становится небезопасной, т.к. клиент может передать заголовок
>> X_Permit_Something ('_' вместо '-'), этот заголовок не будет убран
>> nginx'ом из запроса и в запросе к Apache будет стоять после
>> заголовка X-Permit-Something, добавленного nginx'ом. Apache в
>> свою очередь в переменную окружения HTTP_X_PERMIT_SOMETHING
>> поместит именно последний пришедший в запросе заголовок (т.е.
>> заголовок от клиента).
>
>Хуже того. Можно послать X_Real_IP.
Я в курсе, ага. Но сам nginx его не примет afaik, про apache с
mod_realip/mod_rpaf - не уверен (не проверял). А вот всякие
скрипты, использующие его напрямую - примут точно, и я таких знаю.
> В общем, именно из-за таких
>неоднозначностей я и не хотел долгое время разрешать подчёркивание
>в заголовках, которое позволяется RFCом.
Я помню, и честно говоря был очень удивлён что ты вдруг его
разрешил, даже не попытавшись затронуть соответствующих вопросов. Посему
и полез смотреть внимательно.
:)
>Наверное, нужно сделать это настраиваемым - хочешь подчёркивания -
>будь готов к сюрпризам.
Можно и так. E.g. превратить ignore_invalid_headers в enum, чтобы
можно было выбрать "пропускать стандартные заголовки", не
пропуская при этом откровенный мусор.
>> Т.е. надо явно в конфигурации ещё и говорить
>>
>> proxy_set_header X_Permit_Something "";
>> proxy_set_header X-Permit_Something "";
>> proxy_set_header X_Permit-Something "";
>>
>> Возможно имеет смысл такие заголовки убирать автоматически.
>
>Автоматически это делать накладно - нужно тупо проверять все заголовки
>со всеми. Вышеприведённый вариант будет работать куда быстрее.
Ну зачем же. Для соответствующего хеша сделать специальное
case-insensitive сравнение, которое считает '-' и '_' одним
символом - и всё. Хотя по здравому размышлению идея настройки мне
мне всё-таки нравится больше, да и сделать проще.
Maxim Dounin
More information about the nginx-ru
mailing list