Пароль относится к наиболее чувствительным данным пользователя. Хранить его в открытом виде в таблице технически возможно, но плохо с точки зрения безопасности, делать так, мы не рекомендуем. Чтобы не хранить пароли в открытом виде используют хэши паролей.

Что такое хэш?

Хэши - это такой механизм, который позволяет не хранить пароли пользователей в открытом виде в базе данных. Ваш пароль в сценарии превращается в длинный набор символов. Этот набор символов и есть хэш.

Примеры полученного хэша

javascript
Пример 1 Входящие данные (пароль): "admin_password" Результат HEX хэша (SHA256): "6d4525c2a21f9be1cca9e41f3aa402e0765ee5fcc3e7fea34a169b1730ae386e" Пример 2 Входящие данные (пароль): "user_password" Результат HEX хэша (SHA512): "6ae2d3bfb3b95517b358fcdb29f7743246101ebf13f797d8244df795eec2d1d769a41c059dc37beadac8e40cecab4352764336a90302920ddeb1a6c6df4e8a00"

Чем хорош хэш?

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

Как работает хэш?

Вы применяете хэш-функцию к паролю и сохраняете полученный хэш в базу данных. При следующем вводе пароля пользователем, система снова применяет ту же хэш-функцию и сравнивает полученный хэш с ранее сохраненным значением, за счет чего мы можем сравнивать не пароли, а хэши. Если они совпадают, доступ предоставляется.

Пример сценария с генерированием хэша для пароля из формы:

Хэш можно найти в списке действий сценариев касающиеся криптографии
Image without caption
Предположим, у нас есть исходная строка "qwerty". Если использовать алгоритм SHA256 для создания хэша в формате HEX, результат будет следующим:
javascript
Исходная строка (пароль): "qwerty" Результат HEX хэша (SHA256): "65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5"
Полученный результат записывается в переменную hash. Для хранения хэша рекомендуется создать такую же колонку в таблице Пользователи с типом поля Текст.

Алгоритмы хэша

В параметрах хэширования пароля вы можете заметить алгоритмы кодирования и формат результата. По умолчанию можете поставить алгоритм SHA256 и формат Hex. Этого будет достаточно для безопасности большинства проектов.
Разные алгоритмы позволяют создавать хэши с разной степенью защиты. Более старые алгоритмы, такие как MD5 и SHA1, менее надежны, потому что злоумышленники научились их взламывать. Более новые алгоритмы, такие как SHA256 и SHA512, создают более сложные и длинные хэши, которые труднее взломать. Они могут потребоваться в проектах с определенными требованиями к безопасности.

Повышение надежности с использованием соли пароля

Предположим, что у вас есть 2 клиента, которые используют одинаковые пароли, это значит что они будут иметь идентичные хэши. Чтобы этого избежать можно использовать соль для пароля.
Соль — это дополнительный кусочек случайных данных, который добавляется к вашему паролю перед тем, как он превратится в хэш. Благодаря соли, даже если два человека используют одинаковые пароли, их хэши будут совершенно разными
Также соль нужна, чтобы нельзя было по словарю (список часто используемых паролей) найти пароль пользователя, зная его хэш.

Пример сценария с генерированием хэша и соли для пароля из формы:

  • В переменную password_salt записываем соль пароля с помощью формулы, которая генерирует случайное уникальное значение.
  • Генерируем хэш к результату объединения строк пароля и соли пароля, сохраняем в переменную hash
    • Image without caption
  • Записываем переменные password_salt и hash в базу данных.

Правила хорошего тона в безопасности работы с паролями

  1. Никогда не храните пароли пользователей в открытом виде
  1. Для проверки паролей используйте сравнение хэшей
  1. Для повышения надежности используйте еще соль