nginx-0.7.15

Igor Sysoev is at rambler-co.ru
Wed Sep 10 09:21:15 MSD 2008


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. В общем, именно из-за таких
неоднозначностей я и не хотел долгое время разрешать подчёркивание
в заголовках, которое позволяется RFCом.

Наверное, нужно сделать это настраиваемым - хочешь подчёркивания -
будь готов к сюрпризам.

> Т.е. надо явно в конфигурации ещё и говорить
> 
>      proxy_set_header X_Permit_Something "";
>      proxy_set_header X-Permit_Something "";
>      proxy_set_header X_Permit-Something "";
> 
> Возможно имеет смысл такие заголовки убирать автоматически.

Автоматически это делать накладно - нужно тупо проверять все заголовки
со всеми. Вышеприведённый вариант будет работать куда быстрее.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list