Дадим отпор грубой силе!

Докучаев Дмитрий aka Forb

Xakep, номер #059, стр. 059-062-1

(forb@real.xakep.ru)

GD - расколбасная защита от брутфорса

Написать нормальный брутфорсер - вполне реально. Это сможет сделать любой, постигший азы программирования. Гораздо сложнее защититься от этого метода хака, который так полюбился скрипткидисам. Но различные способы защиты существуют, и все они активно используются на многих ресурсах интернета. В этой статье я расскажу о таких способах и научу тебя реализовывать самый эффективный из них.

Протекты от хакеров

Давай представим, как можно защититься от перебора паролей. Самый популярный способ - блокирование входа на сервис после нескольких неудачных попыток. В этом случае хакер не сможет нормально перебирать пароли. Но против лома нет приема - все известные брутфорсеры умеют пользоваться прокси-серверами. Через них они и делают перебор. Блокировка по IP-адресам в этом случае просто теряет смысл.

Так что одной блокировкой добиться полноценной защиты тяжело. Поэтому придется придумывать что-то другое, например, быстро распространяющийся в Сети способ по динамической генерации картинки с кодом. Как это работает. Когда происходит логин на сервис, система просит пользователя указать код, который он видит на картинке. Разумеется, кроме этого, юзер вводит свой логин и пароль. Лишь после сверки этих трех параметров происходит решение - пускать клиента в систему или нет.

Большой плюс такого метода - надежность. "Вскрыть" картинку и найти в ней цифры не так-то просто, потому что здесь придется писать сложный анализатор изображения. К тому же не нужно ничего блокировать - без кода хакер не сможет зайти в систему, а, следовательно, определить правильность предполагаемого пароля.

Так что, если ты владеешь публичным сервисом, на который юзеры ходят через web-интерфейс, то оптимальным выходом для тебя будет реализовать подобный метод защиты. В этом тебе поможет специальный модуль GD. Он применяется такими языками программирования, как Perl и PHP. Сам скрипт не умеет "резать" изображения и вставлять в них ту или иную информацию. Он работает напрямую со специальной библиотекой libgd, которую, как ты уже, наверное, догадался, придется установить.

Удовлетворение зависимостей

Кодить мы будем на Perl, поэтому для того чтобы модуль GD.pm благополучно установился, необходимо иметь интерпретатор версии 5.004 и выше. Скачать его ты можешь с www.perl.com. Далее, как я уже говорил, тебе понадобится библиотека libgd (версия 2.0.1 или выше). Ее сливай по адресу www.boutell.com/gd/.

Для нормальной работы GD также следует установить библиотеку zlib. Эта либа предназначена для сжатия изображений и по умолчанию устанавливается в любых дистрибутивах. Если же ты не обнаружил ее в своей системе, то бери это добро с www.gzip.org/zlib/.

Теперь самое время определиться, с какими типами файлов ты будешь работать. Дело в том, что модуль поддерживает форматы png и jpg. В старых версиях можно было использовать и формат gif, но его убрали из-за патента на LZW, который получила компания Unisys.

Я советую тебе установить две библиотеки: тебе пригодится и png, и jpg. Либа для работы с JPEG изображениями сливается с ftp://ftp.uu.net/graphics/jpeg/ (версия 6b и выше). PNG берется с www.libpng.org/pub/png/libpng.html. В своих примерах я сделал вывод в формате JPEG, но ты без проблем можешь переделать и под PNG.

Содержание  Вперед на стр. 059-062-2
ttfb: 3.3488273620605 ms