November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Friday, March 5th, 2010 02:25 pm

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

Типичная такая проверка пароля на сложность. По отдельности это всё элементарно, загвоздка в том, что это надо сделать одним выражением.

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

Моя версия: /(?=.*\d)(?=.*[a-z])(?=.*[^0-9a-z])/i Чтобы посмотреть, выделите мышкой.

via [info]nikulina

Оригинал этой записи. Комментировать можно тут или там.

Любые материалы из этого блога запрещается использовать на сайте livejournal.ru в любой форме и любом объёме

Friday, March 5th, 2010 02:04 pm (UTC)
Что только люди не придумают, лишь бы pam_passwdqc не использовать...
Friday, March 5th, 2010 02:05 pm (UTC)
из слова C# можно было догадаться, что там pam_passwdqc отродясь не было :)
Friday, March 5th, 2010 02:13 pm (UTC)
А если пароли у нас не системные?
Friday, March 5th, 2010 02:18 pm (UTC)
а никто не заставляет использовать pam для аутентификации. можно прямыми вызовами обращаться к отдельным модулям для выполнения их узкоспециальных функций, вот для проверки сложности, например
Friday, March 5th, 2010 02:18 pm (UTC)
Ээээ. А зачем, если это 1 строка на перле всё равно?
Friday, March 5th, 2010 02:19 pm (UTC)
а чисто чтоб код не дублировать. раз уж написано, можно пользоваться
Friday, March 5th, 2010 02:23 pm (UTC)
Ага, а инициализация и использование КОНКРЕТНОГО пам-модуля — это, конечно, не дублирование кода.
Friday, March 5th, 2010 02:25 pm (UTC)
библиотеки, вообще-то, для того и придуманы, чтоб их вызывать, а не писать всё самому :)
Friday, March 5th, 2010 02:27 pm (UTC)
Посмотри к чему это привело в мире Java — вместо 1 строчки библиотека на мегабайт и вызов одного метода из неё.
Friday, March 5th, 2010 02:30 pm (UTC)
у меня в детстве тоже было желание написать всё самому, правильно и красиво.
потом до меня дошло, что на это не хватит нескольких жизней. и я стал пользоваться плодами трудов других людей :)
Friday, March 5th, 2010 02:32 pm (UTC)
Не, 10 строчек уже можно заменить на вызов библиотечный. но тут-то речь идёт об одном регекспе!
Friday, March 5th, 2010 02:34 pm (UTC)
так для данной конкретной задачи это вообще не решение, потому что я не знаю, как конкретно этот модуль проверяет стойкость пароля.
Friday, March 5th, 2010 02:19 pm (UTC)
Дык проверяем-то обычную строчку - получится из нее кошерный пароль или нет.
Friday, March 5th, 2010 02:21 pm (UTC)
И зачем разворачивать подсистему PAM да ещё с нестандартным (ну вот для моей системы) модулем, если надо проверить 1 строчку регекспом? Ладно, бы это были системные пароли — тогда сам passwd проверит. Но дрёгать PAM в перл-скрипте установки почтового пароля в базе виртуальных пользователей по мне так отдаёт оверинжинирингом.
Friday, March 5th, 2010 02:13 pm (UTC)
Я вот, например, как админ считаю, что системных пользователей без шелла быть не должно. А шелл нужен далеко не всем...
Friday, March 5th, 2010 02:16 pm (UTC)
что значит "без шелла" в данном контексте?
/usr/bin/scponly - это шелл?
а /bin/false?
Friday, March 5th, 2010 02:18 pm (UTC)
Не шелл это всё. Шелл — это шелл. Ну, ладно, scponly разрешим, хотя я бы прелдпочёл и таких не класть в /etc/master.passwd да технология не позволяет.

а так — е-мейлов у меня на сервере подяка 50, у всех есть пароли, но в /etc/master.rpasswd нет ни одного из них. С WWW/FTP сиутация почти такая же, да.
Friday, March 5th, 2010 02:20 pm (UTC)
Какой еще нахрен master.passwd?
"Вы до сих пор его используете? Тогда мы к вам обязательно заглянем..."
Friday, March 5th, 2010 02:21 pm (UTC)
да ладно тебе придираться, ну shadow, какая разница
Friday, March 5th, 2010 02:26 pm (UTC)
А что такое shadow я вообще не знаю. Нет у меня такого. /etc/master.passwd, /etc/passwd (без паролей) и хэши по ним есть, а shadow — нет ;-)
Friday, March 5th, 2010 05:06 pm (UTC)
Да один хрен... Меня SGID при использовании tcb (http://www.openwall.com/tcb/) как-то напрягает, а вы тут SUID в полный рост пользуете :-/
Friday, March 5th, 2010 08:42 pm (UTC)
Где SUID?
Friday, March 5th, 2010 02:23 pm (UTC)
Хм... А как ты ко мне заглянешь? /etc/master.passwd — он вообще-то "root:wheel -rw------" :)
Friday, March 5th, 2010 02:21 pm (UTC)
ну вот и зачем системным пользователям ftp, smmsp и bind нужен шелл?
Friday, March 5th, 2010 02:22 pm (UTC)
Блин. Ну очевидно, что системные пользователи (технические) я не трогаю.
Friday, March 5th, 2010 02:23 pm (UTC)
а если он почтовый и ftp-для-веба пользователь, то такому зачем шелл?
Friday, March 5th, 2010 02:26 pm (UTC)
Так ему и в системной базе делать нечего. У меня так и есть.
Friday, March 5th, 2010 02:28 pm (UTC)
угу, будем вручную клепать систему аутентификации пользователей нескольких разных сервисов вместо того, чтобы пользоваться имеющейся системной.
мне такой подход не близок.
Friday, March 5th, 2010 02:36 pm (UTC)
Одного виртуального пользователя застроить проще и надёжнее, чем разбиратсья куда какие права раздавать пок аждому из 50-ти UID'ов, учитывая ограниченную модель безопасности юникса.
Friday, March 5th, 2010 02:37 pm (UTC)
зависит от задачи
Friday, March 5th, 2010 02:43 pm (UTC)
С этим не поспоришь. я вот в связи с дешевизной памяти думаю сделаь UID каждому сайту и свой апач каждому сайту + ngnix на входе...
Friday, March 5th, 2010 02:45 pm (UTC)
а я так и сделал :) но пользователи таки системные, домашние директории world-unreadable, а шеллом scponly :)
Friday, March 5th, 2010 02:48 pm (UTC)
Ну да, тут придётся сделать каждого системным пользователем — а как же иначе, если у каждого свой UID?
А вот директории я как раз не хочу делатьб WW и даже GW.
Friday, March 5th, 2010 02:51 pm (UTC)
группа у каждого тоже своя, GW поэтому не существенно.
а WW у меня явным образом отключается при создании очередной домашней директории
Friday, March 5th, 2010 02:54 pm (UTC)
А зачем WW-то делать,
Friday, March 5th, 2010 02:56 pm (UTC)
я, наверное, недостаточно понятно изъясняюсь. я два раза уже написал, что я его НЕ делаю
Friday, March 5th, 2010 02:57 pm (UTC)
Я идиот.я прочёл как world-writable в самом начале а не world-unreadable. Прошу прощения. Обсмотрелся.