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

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

Хеширование паролей с помощью API PHP 5.5

Очень большое количество разработчиков до сих пор используют в своих проектах ужасно слабые и устаревшие алгоритмы, вроде md5(), sha1(), порой даже не прибегая к "соли", или реверсии (сомнительное укрепление). Я предпочитаю BCrypt, как наилучший способ, но многие считают данный алгоритм слишком сложным. С выходом PHP 5.5 работа с данным алгоритмом значительно упрощается.

В состав API хеширования входит четыре функции:

password_hash(string $password, int $algo [, array $options(salt, cost) ]): выполняет хеширование, принимает 3 аргумента - пароль, используемый алгоритм хеширования, ассоциативный массив с опциями: salt - соль, используемая для хеширования, cost - алгоритмическая стоимость вычисления пароля. Если последний аргумент отсутствует, будет создана случайная соль и использована алгоритмическая стоимость вычисления по умолчанию. Возвращает зашифрованный пароль или FALSE в случае возникновения ошибки;

password_verify(string $password, string $hash): проверяет, соответствие пароля с заданным хэшем. Этот хэш может быть создан с помощью password_hash() или обычный crypt() хэш. Возвращает TRUE, если пароль и хэш соответствуют или в противном случае FALSE;

password_needs_rehash(string $hash, string $algo [, string $options ]): проверяет, соответствует ли предоставленный хэш заданному алгоритму и опциям. Если нет, то считается, что хэш должен быть изменён. Принимает три аргумента - проверяемый хэш, используемый алгоритм хеширования пароля, ассоциативный массив с опциями аналогичными опциям из функции password_hash(). Возвращает TRUE, если хэш должен быть изменён, чтобы соответствовать данному алгоритму и опциям, или в противном случае FALSE;

password_get_info(string $hash): Возвращает информацию о данном хэше. Возвращает ассоциативный массив с тремя элементами(ключами): алгоритм(algo), который будет соответствовать константе алгоритма пароля, название алгоритма(algoName), которое имеет человечески читаемое название алгоритма, ассоциативный массив с опциями (options), который включает в себя возможности, предоставляемые при вызове password_hash().

При создании хэша возможно использование следующих констант:

PASSWORD_BCRYPT = 1: используется для создания нового хэш пароля с использованием алгоритма CRYPT_BLOWFISH;

PASSWORD_DEFAULT = PASSWORD_BCRYPT: используется алгоритм хеширования по умолчанию, если алгоритм не задан. Он может измениться в новых версиях PHP, когда будут поддерживаться новые, более эффективные (например, Scrypt) алгоритмы хеширования.

Чем выше значение параметра cost, тем выше эффективность защиты, поэтому следует увеличивать его, в зависимости от технической оснащенности используемого оборудования. Так же одним из главных преимуществ является полная автономия параметра salt (теперь он хранится в хэше), который можно генерировать автоматически и не хранить в отдельном поле.

$options = [ 'salt' => custom_function_for_salt(), # собственный код для генерации соли 'cost' => 12 # по умолчанию используется 10 ]; $hash = password_hash($password, PASSWORD_DEFAULT, $options);
×
SHOP.PIPLOID
ВходРегистрация
ВОЙТИ
ЗАРЕГИСТРИРОВАТЬСЯ

Нажимая на кнопку «Зарегистрироваться», вы подтверждаете свое согласие с условиями предоставления услуг (пользовательское соглашение), а так же на обработку персональных данных

Техническая ошибка

Повторите попытку еще раз. Если ошибка повторится, обратитесь в службу технической поддержки

Ваша заявка уже была отправлена

Ваши данные уже обрабатываются нашими специалистами. Дождитесь звонка!

Мы уже набираем Ваш номер!

Спасибо, что проявили интерес к нашей компании! Специалист свяжется с Вами в течение 5 минут

Не указан номер телефона

Номер телефона является обязательным для Вашей идетификации

Некорректный номер телефона

Указанные данные не могут быть идентифицированы как телефонный номер

Пользователь не найден

Пользователь с указанными данными не зарегистрирован в системе

Неверный пароль

Проверьте язык вводимых символов, а так же включенный верхний регистр

Не указан пароль

Пароль является обязательным для безопасной идентификации в системе. Пароль содержит только цифры, строчные и заглавные буквы латинского алфавита и не может быть короче 6 символов

Пароли не совпадают

Указанные пароли должны быть полностью идентичны. Это необходимо для избежания ошибок!

Ошибка регистрации

В системе уже зарегистрирован пользователь с указанным номером телефона

Не достаточно прав

Вы не являетесь зарегистрированным пользователем системы для выполнения следующих действий