Re: [proposal] SERVER_NAME в fastcgi_params

2023-03-05 Пенетрантность Nikolay Shaplov
В письме от воскресенье, 5 марта 2023 г. 22:04:35 MSK пользователь Илья 
Шипицин написал:
> > Но не следует ли заменить $server_name на $host в конфигах *cgi_params  в
> > дистрибутиве nginx? Я в первую очередь с этой мыслью сюда пришел...
 
> но, с другой стороны, существующие механизмы позволяют вам использовать
> $host и не зависеть от дефолтных конфигов, верно ?
Я в данном вопросе беспокоюсь скорее за других, чем за себя. Я в свое время 
убил очень много времени, пока траблшутил проблему вызванную отсутствием 
корректного значения в SERVER_NAME, и в таких случаях обычно стараюсь сделать 
так, чтобы никому после меня не пришлось бы снова ходть по проделанному мной 
пути. Изменение дефолта в конфигах *cgi_params, решит эту задачу лучше всего

> боюсь, что изменение дефолтного поведения обычно не приветствуется.

В данном случае я бы сказал что это изменение более чем оправдано.

1. Нынешнее положение дел приводит к нарушению RFC. Исправление приведет к 
соблюдению RFC "из коробки". Соблюдать RFC -- не только хорошо, но и очень 
важно.

2. Существующие конфигурации, по моему представлению не будут затронуты этим 
изменением. Я вижу следующие варианты:
2.1. Либо в конфиге указан srever_name и $host будет возвращать то же значение 
что и $server_name
2.2. Значение переменной окружения SERVER_NAME перезаписывается после 
применения дефолтов. Новый дефолт не повлияет на поведение, так как будет 
перезаписан
2.3. cgi-скрипт вообще игнорирует переменную окружения SERVER_NAME. И 
изменения дефолта не страшно.

То есть для существующих инсталляций поведение никак не изменится. Зато очень 
сильно упроститься создание новых инсталляций, для случаев, подобных моему. 


P.S. Мне очень повезло что я настраивал CGI-скрипт написанный на языке который 
я хорошо знаю, и у меня была возможность пройтись по всей глубине его 
выполнения и обнаружить причину проблемы. В случае, если настраивающий этот 
скрипт админ не владел бы языком программирования на котором написан скрипт, 
задача настройки могла оказаться вообще в принципе не решаемой... Совершенно 
не очевидное поведение было в отсутствии значения SERVER_NAME. Этот 
воображаемый админ с большой вероятностью (и не без оснований) обвинил бы во 
все nginx, ведь под apache все работает из коробки. Вот и я бы хотел чтобы и 
под nginx оно тоже работало бы из коробки, я патриот nginx ;-). Я все стараюсь 
поднимать на нем, по мере сил и возможностей.


-- 
Nikolay Shaplov aka Nataraj
Fuzzing Engineer at Postgres Professional
Matrix IM: @dhyan:nataraj.su


signature.asc
Description: This is a digitally signed message part.
___
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru


Re: [proposal] SERVER_NAME в fastcgi_params

2023-03-05 Пенетрантность Илья Шипицин
вс, 5 мар. 2023 г. в 16:59, Nikolay Shaplov :

> В письме от воскресенье, 5 марта 2023 г. 18:49:10 MSK пользователь Evgeniy
> Berdnikov написал:
>
> >
> > > Скрипту, тем ни менее нужно знать доменное имя которое он сейчас
> > > обслуживает, и он смотрит на переменную окружения SERVER_NAME.
> > >
> > > А в этой переменной пусто.
> >
> >  Подумайте об использовании переменной $host.
> Выглядит как хороший вариант, лучше чем $http_host. Это спасибо.
>
> Но не следует ли заменить $server_name на $host в конфигах *cgi_params  в
> дистрибутиве nginx? Я в первую очередь с этой мыслью сюда пришел...
>

боюсь, что изменение дефолтного поведения обычно не приветствуется.

но, с другой стороны, существующие механизмы позволяют вам использовать
$host и не зависеть от дефолтных конфигов, верно ?


>
>
> --
> Nikolay Shaplov aka Nataraj
> Fuzzing Engineer at Postgres Professional
> Matrix IM: @dhyan:nataraj.su
> ___
> nginx-ru mailing list
> nginx-ru@nginx.org
> https://mailman.nginx.org/mailman/listinfo/nginx-ru
>
___
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru


Re: [proposal] SERVER_NAME в fastcgi_params

2023-03-05 Пенетрантность Nikolay Shaplov
В письме от воскресенье, 5 марта 2023 г. 18:49:10 MSK пользователь Evgeniy 
Berdnikov написал:

> 
> > Скрипту, тем ни менее нужно знать доменное имя которое он сейчас
> > обслуживает, и он смотрит на переменную окружения SERVER_NAME.
> > 
> > А в этой переменной пусто.
> 
>  Подумайте об использовании переменной $host.
Выглядит как хороший вариант, лучше чем $http_host. Это спасибо.

Но не следует ли заменить $server_name на $host в конфигах *cgi_params  в 
дистрибутиве nginx? Я в первую очередь с этой мыслью сюда пришел...


-- 
Nikolay Shaplov aka Nataraj
Fuzzing Engineer at Postgres Professional
Matrix IM: @dhyan:nataraj.su


signature.asc
Description: This is a digitally signed message part.
___
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru


Re: [proposal] SERVER_NAME в fastcgi_params

2023-03-05 Пенетрантность Evgeniy Berdnikov
  Добрый день.
  
On Sun, Mar 05, 2023 at 06:41:17PM +0300, Nikolay Shaplov wrote:
> Разбираясь с cgi-скриптом обслуживающим многочисленные доменные имена 
> столкнулся со следующей проблемой:
> 
> В /etc/nginx/fastcgi_params написано
> 
> fastcgi_param  SERVER_NAME$server_name;
[...]
> Скрипту, тем ни менее нужно знать доменное имя которое он сейчас обслуживает, 
> и он смотрит на переменную окружения SERVER_NAME. 
> 
> А в этой переменной пусто.

 Подумайте об использовании переменной $host.
-- 
 Eugene Berdnikov
___
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru


[proposal] SERVER_NAME в fastcgi_params

2023-03-05 Пенетрантность Nikolay Shaplov

Приветствую! 

Разбираясь с cgi-скриптом обслуживающим многочисленные доменные имена 
столкнулся со следующей проблемой:

В /etc/nginx/fastcgi_params написано

fastcgi_param  SERVER_NAME$server_name;

При этом в самом конфиге сайта server_name не указан, сервер обслуживает все 
доменные имена (фильтрация по имени осуществляется на фронтэнде).

Скрипту, тем ни менее нужно знать доменное имя которое он сейчас обслуживает, 
и он смотрит на переменную окружения SERVER_NAME. 

А в этой переменной пусто. Потому что в $server_name тоже пусто. Я подозреваю 
что это как-то завязано на пустой server_name в конфиге.

RFC же требует чтобы SERVER_NAME был корректно установлен всегда:
https://tools.ietf.org/html/rfc3875#section-4.1.14 

Я локально решил эту проблему использовав $http_host в качестве источника 
доменного имени. На практике он определен всегда (хотя в теории может быть 
только для http >= 1.1 это я не проверял):

fastcgi_param  SERVER_NAME$http_host;

Но это некоторые полумеры которые не решают проблему глобально...
Надо либо починить $server_name чтобы он был установлен всегда, либо 
использовать $http_host для задания переменной окружения SERVER_NAME, либо 
какая-то более сложная комбинация.

Если авторы заинтересованы в решении этой проблемы, я могу провести 
дополнительные исследования, подготовить тестовые примеры демонстрирующиее это 
поведение и т.п. (В исходный код nignx наверное глубоко лезть не готов, хотя 
квалификация позволяет, не знаком я с ним совсем).

Если авторы не заинтересованы... Значит придется везде в инструкциях тащить за 
собой эту уродливую конструкцию с $http_host...

-- 
Nikolay Shaplov aka Nataraj
Fuzzing Engineer at Postgres Professional
Matrix IM: @dhyan:nataraj.su


signature.asc
Description: This is a digitally signed message part.
___
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru