Защити свой 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; ## Установим бинарный режим |