Есть ли безопасный способ удалить пользовательское поле из диалогового окна входа? - PullRequest
3 голосов
/ 01 июня 2009

Просматривая Coding Horror, я увидел эту статью об удалении пользовательского поля из диалога входа в систему.

Это интересная концепция, хотя и старая, с 2005 года. Тем не менее, я начал думать об этом и задумался:

Как бы вы могли сделать это безопасным способом?

Если вы идентифицируете пользователя по его паролю, это означает, что все пароли должны быть уникальными - да?

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

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

Я не могу придумать, как можно реализовать это безопасным способом ... какие-нибудь идеи?

Ответы [ 4 ]

2 голосов
/ 01 июня 2009

Вы не идентифицируете пользователей по паролю, вы идентифицируете их по имени пользователя. Вы аутентифицируете пользователей по паролю. Просто подумайте, что значит идентифицировать по паролю. Я присоединяюсь к системе, он просит меня ввести мой новый пароль. Я говорю «foo», он говорит: «foo уже используется». Я говорю «tyvm» и открываю окно входа в систему. В ответ на приглашение я просто ввожу 'foo', и он говорит: "Добро пожаловать, господин президент" ...

Нет, абсолютно не может быть требования иметь уникальные пароли , что было бы огромной дырой в безопасности в любой системе, поскольку полагается на раскрытие информации для функции : получая удовольствие от дубликат вы раскрываете чей-то пароль. Даже с комбинациями имя / пароль, как только вы раскрыли, что «пароль используется», все, что мне нужно сделать, - это перебрать список учетных записей, используя только что сообщенный мне пароль, и одна комбинация будет успешной.

2 голосов
/ 01 июня 2009

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

16-байтовые GUID позволяют избежать коллизий (каждая звезда может иметь 6,8 × 1015 GUID) достаточно хорошо, поэтому это не должно быть слишком сложным. Очевидно, что вводимые человеком данные не так случайны, но если вы добавите достаточно требований, таких как строчные / прописные буквы / цифры / символы / длина, они могут работать достаточно хорошо.

1 голос
/ 01 июня 2009

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

Мой банк придерживается этого подхода, используя мой публичный IP-адрес. На самом деле это немного раздражает. Каждый раз, когда срок аренды моего DHCP истекает, веб-сайт моего банка «не распознает» меня и задает один из нескольких вопросов безопасности, прежде чем я получу стандартный экран имени пользователя / пароля.

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

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

0 голосов
/ 01 июня 2009

Я верю, что ты не можешь.

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

Оба требуются по своей сути, если у вас нет других средств определения личности (IP, ключ-карта и т. Д.)

По сути, вы не можете ожидать, что кто-то поверит в то, что вы тот, кем себя говорите, когда вы не говорите, кто вы есть!

...