Хотите немного серверной магии?..

Что дано: посещаемый портал, 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;

И гость, у которого нет кук, подхватывает эту переменную от пользователя, что посетил сайт прямо перед ним. Чем “пользовались” спам боты и постили порнуху от лица самых активных участников форума :)

И вот так всегда, когда извесен престиж - суть фокуса, фокус перестает быть магией и становится работой…

Удачи на работе, верьте в чудеса!

Связанные записи

Метки: , , ,

Комментариев: 1

  1. alecrow пишет:

    Классный трюк, а ты как до него догадался? Мне вот всегда интересно было как люди находят вот такие прорехи, их же просто так не обнаружишь, это надо специально ковыряться. Но за такую фичу сенкс!

Оставьте свой отзыв!