Бан

Громкие заявления иногда (если не сказать - часто) оказываются пустышками. Не хотел об этом рассказывать во всеуслышание, да уж ладно. Мне сейчас все-равно. Я хочу рассказать о громком заявлении от создателя чата chat.php.spb.ru. Заявлении, касающемся немного устаревшей версии чата 4.50 (в более ранние не заглядывал, в 4.60 - уже все в порядке). Итак, читаем файл help.php с админской помощью:

...
Что такое имя/код браузера

У каждого браузера есть имя, где включается имя/версия браузера, имя/версия/тип ОС, некоторые подробности о плагинах браузера. У каждого барузера, хоть маломальски отличающегося друг от друга, это имя разное. Следовательно, код браузера (строка из 6 байт типа "8708c9") и есть соответстние некого уникального имени уникальной короткой строке.

Используется всего 6 байт, в которые кодируется полное имя, чтобы не занимать много места в памяти. Важно то, что любых 2 разных полных имени браузера всегда закодируются в разные коды! Не важно в какие именно коды, важно, что они будут отличатся друг от друга.

К примеру, к вам в чат зашел супер кул-хацкер с сотней проксей в кармане. Вы его баните, а он меняет адрес прокси и входит опять. В этом случае забаньте его только по имени браузера. Да, при этом вы забаните тех, кто имеет точно такой же браузер, но это весьма маловероятно. На php.spb.ru есть статистика распределения браузеров и их названий. Примерно каждый 1-2% людей имеют абсолютно одинаковые браузеры. Поэтому, забанив кулкацкера вы очень сильно его обломаете (ибо куки-то он допрет стереть, а браузер сменить - врядли). Но с тем же забаните 1-2% своих посетителей. Через часок снимайте бан :-) Кулхакоры к вам больше не придут.
...

Простим автору все грамматические ошибки/опечатки и обратимся к смыслу. Итак, представим себе, что мы - ультракулхацкеры с полными карманами проксей. Нас банят. Но мы меняем ip, стираем куки и заходим вновь. И тут СГМ (Самый Главный Модератор) применяет свое сверхсекретное оружие - бан по т.н. "коду браузера". Мы вновь оказываемся в бане. Пытаемся использовать старую-добрую технику прохождения - не срабатывает...

Наши действия:
1. Скачиваем дистрибутив чата, устанавливаем его на своей машине.
2. Делаем себя админом, запускаем чат. Читаем банановую помощь.
3. Лезем в сырцы в поисках способа вычисления т.н. "кода браузера".
4. Проводим пару минут в поисках...
5. Находим в файле __main.php функцию brcode(), которая как раз и занимается вычислением т.н. "кода браузера". Далее, отыскиваем, какой параметр передается этой функции. В итоге, получаем следующую формулу вычисления т.н. "кода браузера": substr(md5(getenv("HTTP_USER_AGENT")),0,6). Да... Что тут сказать? Ладно, ничего говорить не буду, а просто перейду в следующему действию ультракулхацкера.
6. Запускаем regedit и открываем раздел, к примеру, HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ User Agent \ Post Platform. Создаем в этом разделе строковый параметр с именем "Ultra-pooper post platform" и значением, к примеру, "IEAK".
7. Запускаем IE (удаление кук и смена ip была произведена при неудачной попытке пройти сквозь бан) и беспрепятственно входим в чат. СГМ попустится...

Но это я рассказал о хорошем. А теперь о плохом. Не знаю, какую статистику собирал ув. автор чата на php.sbp.ru, но вот вам статистика браузеров с моего сайта (текущая, за неполный сентябрь 2004):

нумер процент User-Agent
1 28.52% Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
2 6.69% Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
3 5.34% Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
4 5.31% Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)

Думаю, все уже поняли куда я клоню. Стратегия ультракулхацкера: сидеть в чате с User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)и дожидаться бана по т.н. "коду браузера". После чего около 30% всех присутствующих пойдут в баню. После этого можно применить указанную технику снятия бана и вернуться в чат, затесавшись в поредевшие ряды чатовцев. (30% - в лучшем случае (или в худшем. Смотря по какую сторону баррикады находиться). Постоянные посетители чатов, как правило, могут позволить себе новую технику, и поэтому для них цифра 30% является, скорее всего, заниженной).

Стоит отдать должное автору чата за сделанные изменения в версии 4.60 касательно определения кода браузера. В этой версии код браузера уже не является "так называемым". Все сделано на совершенно ином уровне, и ситуация, подобная выбрасыванию из чата вместе с ультракулхацкером трети всех посетителей, теоретически, больше не имеет места быть. Однако, "железный знанавес" - довольно непрочная штука. Непроходимых банов нет. И вряд ли таковые появятся в обозримом будущем.

(Данный материал публикуется только в ознакомительных целях для повышения Вашей квалификации и указанию разработчикам на потенциальную недоработку. Прим. ред.)