#c_sharp #net
вычитал в книге про одну компанию которая конкатенировала строку логина и пароля и получала хешкод вызовом этого метода, заносила его в куки что бы пометить авторизированных пользователей, но потом Microsoft поменяла алгоритм хеширования и многие пользователи не смогли получить доступ к своим учётным записям. Неужели в хотя бы в тысячи строк не найдётся две разные строки которые выдадут одинаковый хеш? Так же в книге говорилось что так делать не надо, подскажите алгоритм хеширования что бы в будущем я не писал такие методы авторизации.
Ответы
Ответ 1
Никаких гарантий нет на то, что значения хешкода не поменяются между запусками приложения. Поэтому компания, которая на это рассчитывала, сама виновата в проблемах своих пользователей, нечего винить Microsoft. Хранить хешкод для использовании при следующем пробеге программы неверно, он имеет право поменяться. Разумеется, хешкоды разных строк с логином/паролем вполне могут совпадать! То, что на основе хешкода от логина/пароля была построена безопасность — ещё одна ошибка. Авторизация должна не быть основана на хешкоде. Объект, представляющий собой пользователя, нужно создавать на основе логина или на том, что в вашей системе уникально идентифицирует пользователя. Хешкод тут вовсе не при чём, он не идентифицирует пользователя.Ответ 2
В книге говорится правильно. Метод GetHashCode не предназначен для решения задач связанных с авторизацией. С его помощью осуществляется иднетификация объекта при проверке на равенство. Подробнее можете почитать на MSDN. В подобных случаях лучше использовать из пространства имён System.Security.Cryptography. Например, тот же MD5.Ответ 3
Суть алгоритма Хеширования и состоит в том, чтобы обеспечивать "лавинный эффект". Изменение хотя бы одного бита должно кардинально менять значение хэш-функции. Но есть коллизии т.е. совпадение результатов, когда они не должны совпадать. Тщательно выбирать саму хэшфункцию не имеет особого смысла. Просто не применяйте подобный паттерн, это bad practice. Прислушайтесь к ответу @VladD и @Streletz.Ответ 4
Хеш в куках иногда хранят для локального разделения пользовательских сессий между собой (хотя это не имеет прямого отношения к авторизации). Например, когда нужно предоставить пользователю возможность запускать одно и то же веб-приложение одновременно в нескольких окнах браузера. Чтобы каждый экземпляр веб-приложения использовал только свой кук, каждый кук маркируют уникальным идентификатором на основе хеша. Вероятность их повторения в период сеанса работы стремится к нулю. С появлением локальных хранилищ (DOM) у браузеров этот метод стал менее популярным.
Комментариев нет:
Отправить комментарий