Рекомендации программисту веб-сервисов
Проверять пароли при регистрации на минимальную длину, присутствие символов разного регистра и цифр. Принуждать пользователя использовать знаки пунктуации и другие неалфавитные символы я не советую. Еще полезно проверять что слово не находится в словарях. Так что ключевые слова: длина, переменный регистр, цифры и по словарю. Проверять при регистрации, если она доступна online и при смене пароля пользователем.
Можно генерировать пароли и раздавать их пользователям. Некоторые вебсервисы так и поступают. Это избавляет пользователя от неудачных попыток придумать стойкий пароль. Регистрация может ускориться, а юзер сэкономит нервы, но зато получит пароль негодный для запоминания. Это не страшно если он пользуется парольным менеджером.
И все же посоветую оставить возможность смены пароля после выдачи автоматического, для тех кто очень хочет установить свой пароль. При этой смене пароль проверять как описано в первом абзаце. Вот возможный алгоритм проверки.
#!/usr/bin/perl $tst = "pasSword3"; $MINPASSL = 9; if (($tst ne uc($tst)) && ($tst ne lc($tst)) && (length($tst) >= $MINPASSL) && ($tst =~ m/\d/)) { print "good password"; } else { print "bad password"; }
Возможная проверка на то что выбранный пользователем пароль не находится в словаре
#!/usr/bin/perl $tst = "pasSword3"; $dictFname = 'passdict.txt'; # все пароли в словаре в нижнем регистре! my(@dict); my($word, $tstlc); $found = 0; open(FH, "<$dictFname") || die "can't find dictionary file $dictFname"; @dict = <FH>; close(FH); chomp(@dict); $tstlc = lc($tst); foreach $word (@dict) { if ($word eq $tstlc) { $found = 1; last; } } if ($found == 1) { print "bad password"; } else { print "good password"; }
Perl удобен тем что ходит на всех платформах. Приведенные наброски легко адаптировать для работы как на CGI так и в консоли.
Кроме проверки на стойкость пароля, в веб-сервисах полезно вести лог неудачных попыток логона, а также устанавливать запрет на вход с определенного IP после 3-5 неудачных попыток на время в 10-15 секунд. Это стандартные защитные меры удаленных систем.
Почему я советую такое малое время задержки после неудачных логонов? Да просто забаненный IP может оказаться прокси-сервером. И кроме злоумышленника через этот прокси к вам могут пытаться залогиниться добропорядочные пользователи. Задержка здесь лишь снизит скорость подбора до неприемлемой. Ни один злоумышленник не станет подбирать пароль со скоростью 10-20 паролей в минуту.
Схема - как организовать свое стадо паролей
Мне кажется вполне логичной такая схема. Есть только несколько паролей в голове Каждый их них качественный. Придуман вручную, с учетом запоминаемости и быстрой набираемости. Это пароли к локальным к системам, парольному менеджеру, и может быть паре удаленных систем. Например к online-почтовику. Эти пароли также отмечены в парольном менеджере. Пароль к его базе сохранен где-нибудь еще. В банке, сейфе.
Все остальные пароли длинные, надежные и незапоминаемые. Все они хранятся в парольном менеджере. Почти все они - это пароли к интернетным сервисам - почтам, форумам, хостингам, сайтам.
Все пароли, включая те несколько, что в голове, периодически меняются. Эта схема работает у меня уже несколько лет, что на мой взгляд даже важнее ее логичности.
Статья взята с сайта www.phormula.nm.ru