среда, 23 июля 2008 г.

Ловушка для спамеров

Сегодня почему-то вспомнился случай из прошлого. Стыдно признаться, но в былые времена пришлось столкнуться с автоматизацией регистраций на форумах. Конечно, не на всех. Выбор пал на PHPBB. Капча там разгадывается достаточно просто (если в код формирования капчи не внесены изменения, что само по себе очень легко и эффективно против регистраций роботов). Список форумов собирался в яндексе. Логины и пароли для всех аккаунтов для простоты были одинаковыми.

С другой стороны — имелся заброшенный форум. Когда-то форум был прогнан по каталогам, вследствие чего был хорошо известен другим автоматическим регистраторам. Сначала капча была пропатчена, но потом заменена стандартной для эксперимента. Спамеры нахлынули. Зная кухню автоматизации, решила проверить догадку: заморачивается ли кто-нибудь из автоматизаторов на уникальные пароли для разных форумов?

Чтобы не вносить кардинальных изменений в движок, сделала следующее:

1. В таблицу phpbb_users добавила дополнительное поле для хранения пароля "в чистом виде" user_nomd5pass. Данные в него вносятся только после регистрации и потом нигде больше не используются.

2. В файле usercp_register.php были внесены кое-какие поправки.

В районе строки 370 перед строкой:


$new_password = md5($new_password);


добавила:


$user_nomd5pass = $new_password;


В строке 630 исправила инсерт:


$sql = "INSERT INTO " . USERS_TABLE . " (user_id, username, user_regdate,
user_password, user_nomd5pass, user_email, user_icq, user_website, user_occ,
user_from, user_interests, user_sig, user_sig_bbcode_uid, user_avatar,
user_avatar_type, user_viewemail, user_aim, user_yim, user_msnm, user_attachsig,
user_allowsmile, user_allowhtml, user_allowbbcode, user_allow_viewonline,
user_notify, user_notify_pm, user_popup_pm, user_timezone, user_dateformat,
user_lang, user_style, user_level, user_allow_pm, user_active, user_actkey)
VALUES ($user_id, '" . str_replace("\'", "''", $username) . "', " . time() . ", '"
. str_replace("\'", "''", $new_password) . "', '"
. str_replace("\'", "''", $user_nomd5pass) . "', '"
. str_replace("\'", "''", $email) . "', '" . str_replace("\'", "''", $icq)
. "', '" . str_replace("\'", "''", $website) . "', '"
. str_replace("\'", "''", $occupation) . "', '"
. str_replace("\'", "''", $location) . "', '"
. str_replace("\'", "''", $interests) . "', '"
. str_replace("\'", "''", $signature)
. "', '$signature_bbcode_uid', $avatar_sql, $viewemail, '"
. str_replace("\'", "''", str_replace(' ', '+', $aim)) . "', '"
. str_replace("\'", "''", $yim) . "', '" . str_replace("\'", "''", $msn)
. "', $attachsig, $allowsmilies, $allowhtml, $allowbbcode, $allowviewonline,
$notifyreply, $notifypm, $popup_pm, $user_timezone, '"
. str_replace("\'", "''", $user_dateformat) . "', '"
. str_replace("\'", "''", $user_lang) . "', $user_style, 0, 1, ";


После регистрации первых же спамерских ласточек, нашла по яндексу, где они еще регистрировались, проверила — сохраненный пароль действительно подошел. Дальше у меня были разные мысли. Первым делом пришло в голову программно пройтись по тем форумам и поменять пароли на свои. Но потом подумала: как правило, такого рода аккаунты — одноразовые, и вряд ли кто-нибудь будет пользоваться ими повторно. Использовать для своих целей? — Подходящих целей пока нет :)

В общем, после проведения эксперимента, сделала кое-какие выводы. Один из которых: если придется еще раз этим заниматься, то на всякий случай параноидально буду генерировать пароли для каждого случая отдельно.

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