ибо по-друому ситуацию ни в вебинаре сказать, ни в блоге описать. Эвфемизмы всё-таки несут в себе бранный оттенок, но наблюдаемой мной феномен нанёс мне чисто эстетические травмы, а крепкие слова я приберегу для описания эффективных технологических решений.
Что IT-шники, не люди? Тоже есть хотят!
И пластиковые деньги в виде (псевдо) кредитной карточки требуют дистанционного управления посредством web. Такое вот культурное начало рассказа о моих вчерашних траблов с интернет-банкингом моего bank-а (чуть не выругался).
Обычно для управления счётом через web-панельку (админку, приблудку, браузерный клиент) нужно ввести логин/пароль. Я довольно интенсивно пользуюсь данным средством, т.к. стараюсь переводить микроскопические суммы. Мне так кажется, что экономия больше. А раз часто делаю, то и логин/пароль не успеваю забыть. Пароль у меня длинный. Ыщтпыщаафшерфтввумщешщт или вроде того. Кто назовёт человека вниз головой, получит приз.
Your account is blocked
Потому что я ввёл 5 раз пароль, но не угадал ни одной буквы. Решается такой вопрос визитом в отделение банка. Что мне сказал менеджер банка. В системе аутентификации можно было задать пароль произвольной длины. Я это и сделал, когда активировал сервис 2 года назад. Внимание, пароль 15 символов.
А система безопасности реально внутри себя использовала 10-символьные пароли. Т.е. мой пароль был сохранён, но не все 15 символов, а только первые 10 из него. На протяжении 2 лет я вводил 15 символов, которые потом урезались до 10 и сравнивались с 10-ю, хранящимися в базе.
В какой-то момент систему переделали на "более 10 символов". И вводимый мной 15 символьный пароль уже без обрезания сравнивался с хранящимися в базе 10-ю символами. Ну и какой телепатией я должен был пользоваться при этом?
Решение
оказалось просты, о чём мне поведал добрейший и любезнейших менеджер. Вводить нужно пароль, но не весь, а только первые 10 символов.
Изящное решение. Сначала обрезать пароль до 10 символов, потом увеличить длину, а пользователя держать в неведении, уповая на то, что большинство клиентов не будут делать длинные (=безопасные) пароли.
Мораль
вывести из данной истории достаточно сложно, т.к. не ясна мотивация разработчика относительно первичного ограничения. 10 пальцев? Магия круглых чисел? Экономия пространства в БД? Использование экзотического немасштабируемого алгоритма сравнения? Хочется небольшой дискуссии по поводу ограничений, например, длины полей. А как вы, создавая поле таблицы "фио" (или "фамилия", если 1нф), выбираете длину?
Posted by Vsevolod Leonov on May 15th, 2012 under public /
9 Responses to "Всё правильно сделал… или пароль 10 символов"
Андрей Says: May 15th, 2012 at 7:05 am
Типичная проблема неправильного понимания свойств объектов в той части, что объекты могут храниться во времени и при внесении изменений в систему нужно учитывать не только текущее состояние объектов, но и то, что накопилось за время эксплуатации системы (этот момент очень часто не то, что теряется, а скорее не осознается). Проблему можно было выявить сразу при использовании автоматизированного тестирования, чему скорее всего тоже не было уделено должного внимания… ПО имеет свойство изменяться во времени, поэтому и длина полей в БД может обоснованно меняться. Причин может быть много: от новых требований до задач интеграции…
Алексей Тимохин Says: May 15th, 2012 at 8:02 am
Несколько раз сталкивался с похожими ограничениями. Например, раньше на многих сайтах можно было использовать очень короткие логины и пароли (например 4 символа). Внезапно, разработчики вводили проверку на минимальную длину логина, например на 6 символов, и пользователи с короткими логинами начинали испытывать неудобства.
p.s. Мне тоже нравится такой способ кодировать пароли. Внешне бессмысленный, и при этом легко запоминается. p.p.s. В Firebird-е есть такой же прикол. Из введённого пользователем пароля реально используются только первые 8 символов. При том, что системный пароль по умолчанию "masterkey" 9 символов, при подключении можно вводить только masterke. Никаких предупреждений, пользователю, разумеется не выводится. Если когда-нибудь максимальная длина пароля будет увеличена, вероятно придётся разработчикам самим проверять в программе длину и версию сервера.
arni Says: May 15th, 2012 at 8:34 am
>В Firebird-е есть такой же прикол. Из введённого пользователем пароля реально >используются только первые 8 символов. При том, что системный пароль по умолчанию >"masterkey" 9 символов, при подключении можно вводить только masterke. >Никаких предупреждений, пользователю, разумеется не выводится.
Firebird не имеет механизма предупреждений - это не IDE. Может выкинуть исключение, но видимо это не то, что вы бы хотели получить.
Alexander Alexeev Says: May 15th, 2012 at 8:41 am
Знакомая проблема. У многих сайтов при регистрации ограничение в 20-30 символов, но на их же форме логина такого ограничения нет. Вот и приходится потом после регистрации от пароля по символу откусывать, пока не подойдёт… бесит.
И этому нет никакого разумного объяснения. Пароли всё равно не хранятся, хранится их хэш, который всегда фиксированного размера. Поэтому не важно - 10 символов пароль или 200. Так сделайте 200 и спите спокойно.
Пароль же не обязательно должен быть одним словом. Любимое предложение/цитата хороши в качестве пароля - их невозможно подобрать из-за громадного размера, маловероятно, что их удастся подобрать атакой по словарю и их очень легко запомнить. Единственный минус - вводить долго.
Итого, все, кто вводил ограничения на длину пароля, будут гореть в аду
delphinotes Says: May 15th, 2012 at 9:18 am
> А как вы, создавая поле таблицы "фио" (или "фамилия", если 1нф), выбираете длину? Чаще - по наитию, с некоторым разумным запасом (ну например для Фамилии наверняка 64 символов хватит). При этом приложение знает (или умеет определять!) размер поля в БД и изначально не даёт ввести большее кол-во символов. (А ещё БД сама ругнётся, если вдруг строка всё-таки не влезет в поле - пользователь получит отказ ввода данных и текст ошибки)
Со временем, пользователь может попросить увеличить размер поля, и это нормально.
С паролями вообще странно, ведь хранить пароли в БД в открытом виде просто глупо. Обязательно применяется шифрование, причём _одностороннее_, или попросту говоря высчитывается хэш, длина которого фиксирована и заранее известна, поэтому какая там длина самого пароля - никого не волнует. А если при этом делать какое-то ограничение, да при этом обрезать введённую строку втихую - это может говорить либо о компетенции разработчиков, либо наводить на мысль, что пароли в той БД всё-таки хранятся не безопасно.
Vsevolod Leonov Says: May 15th, 2012 at 10:01 am
>>Итого, все, кто вводил ограничения на длину пароля, будут гореть в аду
absolutely! Чего я в банк скакал носорогом? С учётом, что я из-за онлайн-хака уже менял карточку.
Ещё бы предал бы анафеме людей, которые мне спамят в комментах постоянно "Путь к истине" и "Сосновая мебель"
64-длина поля - это по-нашему! по-двоичному! Кстати, никто не тестил, насколько varchar медленнее char?
MD5 по слухам, бывает дублирует. Наврали?
Ыщтпыщаафшерфтввумщешщт = SongsOfFaithAndDevotion - альбом Depeche Mode. Забыть нельзя, а когда вводишь - не устаешь, ибо в голове песни играют. Человек вниз головой - Мартин Гор, его там для прикола вешали за ноги.
Keyoff Says: May 15th, 2012 at 9:25 pm
Ыщтпыщаафшерфтввумщешщт = Songs Of Faith And Devotion
… знал что не рандом
Евгений Says: May 16th, 2012 at 1:34 am
>> либо наводить на мысль, что пароли в той БД всё-таки хранятся не безопасно Тоже возникла такая мысль, но… В данном случае, проблема скорее всего не в хранении, а в том, что те, кто делали версию, условно говоря, 2.0, не учитывали или не знали особенности функционирования версии 1.0, что плохо, или просто не заморачивались этим вопросом (речь про совместимость), что тоже нехорошо. Вряд ли в такой системе пароли хранят или хранили открытыми, все-таки во всех книжных, и не только, примерах хранятся хэши. Но вот при высчитывании хэша введенную строку могли в версии 1.0 просто обрезать… Предупреждали при этом пользователя о том, что будет использоваться столько-то символов - об этом мы не узнаем - Всеволод мог просто не прочитать написанное мелким шрифтом где-то предупреждение. А вот разработчики версии 2.0 особенность обрезания хэшируемых строк никак не обыграли. Ясно, что восстановить полный пароль никак нельзя. Но и напрягать пользователей сообщениями типа: "смените пароль", плохо, так как эти системы всегда всех предупреждают: "мы никогда не просим Вас прислать, изменить" еще что-то там с паролем сделать. Разработчикам бы просто ввести проверку на дату регистрации пользователей, или, ввести дату задания пароля, и для старых паролей продолжать обрезать, а для новых использовать всю длину, или обрезать на два символа больше - не знаю, что они там придумали. Но никто не вспомнил или вообще об этом не подумал. Плохая организация, плохое руководство. А с длиной полей в БД свистопляска и шабаш везде и всегда. В доморощенных проектах, в проектах серьезных, корпоративных, коробочных, бесплатных, дорогих. А все потому, что вряд ли кто задумывается об этом, чаще "по наитию" или исходя из своих представлений о разумности. Помнится, в начале трудовой деятельности, при программировании БД с использованием Paradox Engine под ДОС-ом, чтобы уменьшить размер записи даты хранили вместо стандартного поля (длина 4 байта) в поле SmallInt (Short) (2 байта), отводя 5 бит под число, 4 бита под месяц и 7 бит под год. Каково? Казалось тогда, что очень разумно… Или вот фотографию, отснятую сканером, выводили в алфавитно-цифровом режиме работы дисплея, перепрограммируя старшие 256 символов расширенного 512 символьного набора (вид символов программировался матрицей 8/9 на 16, младшие 256 символов использовались для вывода обычного текста, старшие 256 никто, как правило, не использовал, а можно было, хитрым трюками…). Фотку выводили в прямоугольнике размером 20х12 символов, или 160х192 пикселей. Качество никакое, конечно, но в БД данные занимали всего 240 байт. Да… И с ФИО извращались, как могли Был момент, когда под текстовые строки практически всегда отводили 240 символов - как-то связано было с тем, чтобы при изменении типа с Alfa на Memo не менять размер…
>>MD5 по слухам, бывает дублирует Были как-то кем-то получены на разных наборах одинаковые хэши, правда, вроде, долго специально мучали… Но SHA-X никто ведь не отменял…
>> Ыщтпыщаафшерфтввумщешщт = SongsOfFaithAndDevotion Теперь осталось угадать логин и будет приз