Зависит от контекста
Важно оценить чувствительность материала, который вы обслуживаете. Чтобы углубиться, я приведу несколько вариантов использования.
Сценарий 1: приложение для социальных сетей
Все взаимодействия вашего пользователя происходят в общественных местах. Их адрес электронной почты будет использоваться в качестве имени пользователя. Там имя пользователя не считается приватным, потому что его имя появляется во всех их сообщениях. Имя пользователя может быть найдено другими пользователями и / или включены приглашения по электронной почте.
Вердикт - Хеширование = Плохо
Сценарий 2: сайт электронной коммерции
Пользователь может участвовать или не участвовать в публичных взаимодействиях (например, комментирование, рецензирование). Использование адреса электронной почты в качестве имени пользователя, вероятно, является плохой идеей, поскольку с помощью восстановления пароля скомпрометированная учетная запись электронной почты означает скомпрометированную учетную запись пользователя на вашем сайте.
Здесь много серой области, которая обычно используется для «удобства». Если ваш сайт использует электронную почту в качестве имени пользователя, хранит историю доставки и номера кредитных карт; скомпрометированная электронная почта может означать множество проблем с кражей личных данных для вашего пользователя.
В этом случае использование политики, где имя пользователя не равно адрес электронной почты пользователя, вероятно, является хорошей идеей. Хэширование электронной почты не добавляет значения.
Примечание: я смотрю на вас Amazon.com .
Вердикт: обычная практика! = Хорошая практика
Сценарий 3: порно сайт
Сделать имя пользователя псевдонимом, а имя пользователя - адресом электронной почты пользователя. Они могут склоняться к тому, чтобы говорить о содержании, и не обязательно хотят, чтобы их имя отображалось в результатах Google для грязного сайта.
Предположим, здесь худшее. Если каким-то образом ваша база данных взломана, раскрытие личности вашего пользователя может нанести непоправимый вред. Не думаете, что это может случиться с вами? Взгляните на эту статью .
Мало того, что учетные записи их пользователей взломаны и пароли раскрыты, но есть большая вероятность, что многие из этих пользователей использовали один и тот же пароль в своих учетных записях электронной почты. Теперь их информация анонимно размещена на PasteBin для просмотра всем миром. Хуже того, большинство из них, вероятно, даже не знают, что это уже произошло.
Просто хэшируя имя пользователя и пароль, они избавили бы себя и своих пользователей от множества неприятностей.
Вердикт: определенно хешируйте адрес электронной почты, независимо от того, используется ли он в качестве имени пользователя.
Сценарий 4: Банк
Само собой разумеется, что никакие расходы не должны быть сэкономлены, когда речь идет о банковских / финансовых сайтах.
Безопасность может быть увеличена на:
- Использование имени пользователя, отличного от адреса электронной почты
- Принудительное использование уникального имени пользователя с помощью цифр и букв
- Хеширование паролей
- Требование двухточечной аутентификации (в случае взлома пароля электронной почты пользователя)
- Хеширование адресов электронной почты
- и т.д ...
Не нужно жалеть средств на защиту ваших пользователей, потому что если вы этого не сделаете, это значит, что вы играете на деньги.
Вывод:
Не существует жесткого и быстрого правила безопасности, которое применяется ко всем сайтам. В некоторых случаях имя пользователя публикуется, поэтому хэширование не добавляет значения. В других случаях отсутствие хеширования может нанести непоправимый вред. Если вы в конечном итоге создаете сайт, где хэш имени пользователя / электронной почты может быть полезен, вот хороший подход.
- Hash имя пользователя
- Генерация уникальной соли для пользователя
- Хешируйте пароль, используя соль
- Хранить пароль с солью в базе данных
Не хешируя имя пользователя солью, вы избегаете проблемы курица / яйцо. Если вы не используете статическую соль для всех имен пользователей.
Имейте в виду, что статическую соль для всех учетных записей пользователей можно узнать, прочитав код. Как только будет обнаружена статическая соль, она будет бесполезна, если будет применена атака с радужного стола. Если вы солите пароли, создайте динамическую соль и сохраните ее вместе с остальными учетными данными пользователя в базе данных.
Если вам нужны жесткие / быстрые правила для простоты, вот несколько хороших предположений, которые следует запомнить:
- Предположим, что ваша база данных может быть скомпрометирована в какой-то момент
- Предположим, что ваш исходный код будет скомпрометирован в какой-то момент
- Предположим, что в какой-то момент электронная почта вашего пользователя будет скомпрометирована
- Предположим, что ваш пользователь туп и использует тот же пароль для вашего сайта, что и для электронной почты
- Предположим, что хакеры умны / изобретательны и финансово мотивированы.
Если вы решите хранить конфиденциальные / личные данные, то выполнение дополнительного шага может спасти вам PR / правовой кошмар в будущем.
Обновление: Интересная статья о начальном хешировании только что появилась на Coding Horror .