Хотите немного серверной магии?..
Что дано: посещаемый портал, Perl и Nginx.
А теперь магия! Логинимся на портале как Finnr Rastas и просим коллегу тоже зайти на портал. И нажать пару раз Ф5.
Чудо! Финнов стало больше! Он залогинен как Finnr Rastas. Смотрим куки - их нет. Все чисто. Переходим на следующую страницу - и вы снова никто, гость.
Забавно, да? :) Куки чисты, скрипты работают исправно. На апаче же все работало годами без проблем. В чем же “престиж” трюка?
Nginx - источник серверного волшебства!
Итак “престиж” по пунктам:
1. Perl запускается как fastCGI процесс, который слушает tcp сокет на определенном порту. Таких процессов несколько, чтобы обеспечить распараллеливание запросов. ProcManager юзать не стал в силу разных причин, может даже ошибся в его написании.
2. Данный fastCGI скрипт запускает дочерние скрипты, которые мы собственно и запрашиваем и отдает их nginx’у.
3. Так как это fastCGI и он все время висит в пямяти, то и переменные в нем статичные и… Переменная $ENV{HTTP_COOKIE} так же передается разным скриптам. А все почему?
Потому что в дефолном конфиге nginx’а не передается fastcgi параметр HTTP_COOKIE, т.е. в файлике fastcgi_params нет строки:
fastcgi_param HTTP_COOKIE $http_cookie;
И гость, у которого нет кук, подхватывает эту переменную от пользователя, что посетил сайт прямо перед ним. Чем “пользовались” спам боты и постили порнуху от лица самых активных участников форума :)
И вот так всегда, когда извесен престиж - суть фокуса, фокус перестает быть магией и становится работой…
Удачи на работе, верьте в чудеса!
15 января 2010 в 14:25
Классный трюк, а ты как до него догадался? Мне вот всегда интересно было как люди находят вот такие прорехи, их же просто так не обнаружишь, это надо специально ковыряться. Но за такую фичу сенкс!