ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: nginx-0.7.15



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



 




Copyright © Lexa Software, 1996-2009.