Есть ли безопасный способ удалить пользовательское поле из диалогового окна входа?
Просматривая Coding Horror, я увидел эту статью об удалении пользовательского поля из диалогового окна входа в систему.
Это интересная концепция, хотя и старая, с 2005 года. Тем не менее, я начал думать об этом и задумался:
Как бы вы могли сделать это безопасным способом?
Если вы идентифицируете пользователя по его паролю, это означает, что все пароли должны быть уникальными - да?
Если все пароли должны быть уникальными, что вы делаете, когда кто-то вводит пароль, который уже используется?
Вы не можете сказать им, что он уже используется, потому что это выдаст чужой логин.
Я не могу придумать, как можно было бы реализовать это безопасным способом... какие-нибудь идеи?
4 ответа
Вы не идентифицируете пользователей по паролю, вы идентифицируете их по имени пользователя. Вы аутентифицируете пользователей по паролю. Просто подумайте, что значит идентифицировать по паролю. Я присоединяюсь к системе, он просит меня ввести мой новый пароль. Я говорю "foo", он говорит: "foo уже используется". Я говорю "tyvm" и открываю окно входа в систему. Когда мне предложат, я просто ввожу 'foo', и он говорит "Добро пожаловать, господин президент"
Нет, абсолютно не может быть требования иметь уникальные пароли, что было бы огромной дырой в безопасности любой системы, потому что она зависит от раскрытия информации, чтобы функционировать: получая дубликат, вы раскрываете чей-то пароль. Даже с комбинациями имя / пароль, как только вы раскрыли, что "пароль используется", все, что мне нужно сделать, - это перебрать список учетных записей, используя пароль, который вы только что открыли мне, и одна комбинация будет успешной.
Моя первая мысль, о которой также говорится в статье, - повысить требования к сложности пароля, чтобы избежать коллизий.
16-байтовые GUID позволяют избежать коллизий (каждая звезда может иметь 6,8×1015 GUID) достаточно хорошо, поэтому это не должно быть слишком сложным. Очевидно, что вводимые человеком данные не так случайны, но если вы добавите достаточно требований, таких как строчные / прописные / цифры / символы / длина, это может сработать достаточно хорошо.
Что ж, я полагаю, вы могли бы искать какой-то другой "унифицирующий" данные для использования в сочетании с паролем. Для веб-приложения это может быть хеш-код, вставленный в файл cookie с предыдущего посещения. Было бы сложно гарантировать уникальность (например, несколько пользователей из одного профиля на одном компьютере).
Мой банк использует этот подход, используя мой публичный IP-адрес. На самом деле это немного раздражает. Каждый раз, когда срок аренды моего DHCP истекает, веб-сайт моего банка "не распознает" меня и задает один из нескольких вопросов безопасности, прежде чем я получу стандартный экран имени пользователя / пароля.
Многофакторная безопасность использует что-то вроде этого (аппаратный ключ или предоставленный аппаратный идентификатор в сочетании с паролем).
Такой подход кажется мне чрезмерно умным, а умный - редко правильный подход к системам безопасности.
Я верю, что ты не можешь.
Вводя свое имя пользователя, вы предоставляете свою личность, вводя свой пароль, вы предоставляете серверу средства для проверки этой личности.
Оба необходимы по своей природе, если у вас нет других средств определения личности (IP, ключ-карта и т. Д.)
По сути, вы не можете ожидать, что кто-то поверит, что вы тот, кем вы себя называете, когда вы не говорите, кто вы есть!