Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #41, АПРЕЛЬ 2004 г.

Защити свой WWW-сервер

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

Спецвыпуск Xakep, номер #041, стр. 041-088-2


Если ты не администратор, а просто хостишься на сервере, можно настроить именно свой виртуалхост. Для этого создай в нужном каталоге файл .htaccess, где пропиши необходимые директивы. Изменения вступят в силу сразу же, для этого даже не надо релоадить httpd.

Пароль – надежное средство

Теперь представь, что ты хочешь ограничить доступ к определенному ресурсу. Неважно почему, просто захотелось и все. Реализовать это не просто, а очень просто. Нам понадобится помощь двух файлов: .htaccess и .htpasswd, а также одной программы под названием htpasswd.

Скрипт htpasswd находится в каталоге Apache/bin. Запусти его с параметрами –cb .htpasswd имя_пользователя. После запроса пароля ты получишь свежесозданный .htpasswd с парой login:пароль. Все это очень хорошо, но кодировать методом DES ненадежно, поэтому перекодируем пароль методом MD5, дописав параметр –m. И напоследок выполним команду: chmod 400 .htpasswd, которая не даст хацкеру прочитать его ;).

Но и это еще не все. Теперь создаем .htaccess со следующим содержимым:

AuthType Basic

AuthName "Prohibited zone"

AuthUserFile "/web/hosting/html/.htpasswd"

require valid-user

Все в шоколаде, и при попытке зайти на сайт, сервер потребует пароль. Только после удачной авторизации Apache пропустит пользователя.

Самописные скрипты

Теперь представим, что админ запрещает создавать свои .htaccess-файлы (такое тоже возможно). В этом случае можно написать свой cgi-скрипт, который будет проверять правильность пришедшего пароля. Вот кусок сценария, который реализует эту идею:

use CGI qw(:standard);

$pass=param('passwd');

open(DB,".htpasswd");

chomp($pass=<DB>);

close(DB);

if (crypt($pass,$passwd) eq $pass) {

print "All ok\n";

} else {

exit "Wrong password, sorry\n";

}

Фантазируй, и тебе улыбнется удача. Мой пример лишь верхушка айсберга возможностей, которые дает тебе Perl. Проблема может возникнуть, если хостер не дает использовать cgi-сценарии. В этом случае можешь написать авторизацию на JavaScript, прибавляя пароль к названию требуемого документа. Если все верно, сервер откроет нужный html, в противном случае пользователь получит 404 not found.

Динамические картинки

Еще одним интересным способом защиты от взломов и брутфорсов является создание динамических изображений. Для этого придется использовать модуль gd.pm и требуемые зависимости (libjpeg, libpng, GD). Обычно на крупных хостингах все модули и библиотеки уже установлены. Тебе остается лишь использовать их на полную катушку ;). Вот самый простой скрипт, рисующий изображение с числом:

#!/usr/bin/perl

use GD; ## Заюзаем графический модуль

$image = GD::IMAGE->new(50,50); ## Создадим поле для квадратика

$black = $image->colorAllocate(0,0,0);

$white = $image->colorAllocate(255,255,255); ## Инициализируем белый и черный цвета

$image->rectangle(0,0,50,50,$black); ## Нарисуем квадратик

$image->fill(49,49,$black); ## И зальем его черным цветом

$image->string(gdGiantFont,5,15,"31337",$white); ## Напишем заветное число посередине фигуры

binmode STDOUT; ## Установим бинарный режим

Назад на стр. 041-088-1  Содержание  Вперед на стр. 041-088-3