Защита веб-приложений на Perl - страница 5

стр.

Можно отсеять вывод той информации, которая является секретной, и которую злоумышленник попытается вытащить. Таким образом, даже если уязвимый скрипт что-то выдаст, вы можете вырезать это из ответа при помощи mod_security.

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

24.

Принимайте меры против подбора пароля.

Задержка входа – простейший, но при этом уже достаточно неслабый способ. Сведет на нет ручной перебор и автоматический однопоточный перебор с одного компьютера.



Против многопоточного перебора поможет ограничение количества неудачных попыток войти под одним и тем же логином в течение определенного промежутка времени. После их превышения срабатывает временная блокировка логина. Отправная точка – пять попыток за три минуты (это и слишком жесткие правила для целесообразности автоматического подбора хорошего пароля и сносная пауза для человека, если он опечатался несколько раз подряд).

Храните неудачные попытки входа примерно в такой табличке:

logindatetime
 vasya  25.12.2007 09:08:57 
 test  25.12.2007 09:09:06 
 admin  25.12.2007 09:09:31 
 admin  25.12.2007 09:09:39 
 admin  25.12.2007 09:09:50 
 admin  25.12.2007 09:10:06 
 admin  25.12.2007 09:10:22 
 …  … 

При очередной неудачной попытке опросите табличку на предмет ранее зарегистрированных попыток в течение тех самых трёх минут. В этом примере видно, что пора блокировать на некоторое время логин admin, чтобы пресечь дальнейший перебор.

Жестоко? Ничуть. Как сказал один мой коллега: «Не можешь ввести пароль за пять попыток – иди проспись». Весьма метко. Только представьте себе человека, которому пять попыток ввода пароля не принесли успеха. В таком состоянии он сам может стать угрозой. А если он забыл пароль, будет время попытаться вспомнить, спокойно и неторопливо.

Это не идеальный вариант, так как злоумышленник может догадаться намеренно производить попытки входа и тем самым по сути блокировать возможность входа хозяина логина.

Против распределённого перебора паролей с разных компьютеров поможет ограничение количества неудачных входов в единицу времени с одного IP. При нарушении на время блокируется связка IP-логин. Это заодно решает проблему с намеренной блокировкой логина: самое страшное, что может случится после блокировки – admin не сможет войти в течение пяти минут всего лишь на одном компьютере.

iplogindatetime
 192.168.0.15  vasya  25.12.2007 09:08:57 
 192.168.0.17  test  25.12.2007 09:09:06 
 192.168.0.10  admin  25.12.2007 09:09:31 
 192.168.0.10  admin  25.12.2007 09:09:39 
 192.168.0.10  admin  25.12.2007 09:09:50 
 192.168.0.10  admin  25.12.2007 09:10:06 
 192.168.0.10  admin  25.12.2007 09:10:22 
 …  …  … 

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

proxy_ipdatetime
 192.168.0.1  25.12.2007 09:08:57 
 192.168.1.1  25.12.2007 09:09:06 
 192.168.1.1  25.12.2007 09:09:50 
 192.168.4.1  25.12.2007 09:10:06 
 192.168.0.1  25.12.2007 09:10:22 
 …  … 

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

При вводе или смене пароля проверяйте его на слабость. Прежде всего недопустим пустой пароль. Помимо традиционного пробивания по словарю я советую самостоятельно дописать специфические проверки под ваше приложение в зависимости от заполняемых пользователем полей при регистрации. Итак, пользователь вводит о себе какую-то информацию. Система не должна позволить ему задать себе пароль, равный логину, имени, фамилии, дате рождения в вариациях формата (то есть если введена дата рождения 05.10.1992, то пароль не должен быть таким: ”05.10.92“, ”05/10/92“, ”05-10-92“, ”051092“, ”1992“ и так далее), номеру телефона или ICQ, городу и тому подобное. Эту информацию часто можно легко найти на других сайтах и форумах в профиле и попробовать в качестве пароля.