Безопасное хранение паролей в PHP: функции и методы
Быстрый ответ
Для начала, вам потребуется вот такой запрос: используйте сырую хэш-функцию для сброса паролей пользователей. Bcrypt вполне подойдет для этой цели:
-- Не забудьте снять резервную копию, иметь подушку безопасности полезно!
UPDATE users
SET password = crypt('new_password', gen_salt('bf'));
Теперь дадим обстоятельный ответ на вопрос о том, как надёжно обезопасить пользовательские пароли.
Оптимальный тип данных для хранения хэшей паролей
Для хранения хэшированных паролей выбирайте VARCHAR(255) или TEXT. Это обеспечит достаточное пространство для хранения и сохранит гибкость в случае изменений форматов хэшей.
Алгоритмы хэширования, с учетом будущего
Пришло время уйти от MD5. Сфокусируйтесь на bcrypt или Argon2. Благодаря им вычисления займут больше времени, что позволяет повысить защиту от атак методом перебора.
Нормализация паролей: одно и то же, но с разницей
До того, как приступать к хэшированию, обязательно проводите нормализацию паролей согласно RFC 7613. Это гарантирует, что одинаковый пароль всегда будет преобразовываться в одинаковый хэш, независимо от способа ввода и особенностей Unicode.
Обязательно приведите символы к формату NFC и замените нестандартные пробелы на обычные, чтобы создать однородную последовательность.
Пароли и SQL-инъекции
При работе с паролями функции escape_string()
, htmlspecialchars()
и addslashes()
стали прошлым веком. С password_hash()
SQL-инъекции будут только казаться страшными, как старая, обидевшаяся тыква после Хэллоуина.
Верификация паролей на уровне профессионала
Сравнивайте представленные пользователем пароли не как своих идентичных близнецов, а с помощью функции password_verify()
, которая позволяет безопасно сопоставить предложенный пароль с его хэшем.
Визуализация
Представьте процесс очистки паролей как секретную миссию:
🔒➡️🚰💧➡️💎
Исходные данные: Конфиденциальная информация (Пароли). (🔒 + 🚰💧)
# Имена агентов остаются неизвестными. Пальцем по губам, это секрет.
SELECT username, '********' as password FROM users;
Итог задачи: Данные обезопасены, теперь они "чистые". (💎)
Агенты (👥): [Бонд, Борн, Хант]
Кодовые имена заданий (🔏): [🔒, 🔒, 🔒]
Результат: Идентификации агентов поддержаны, однако кодовые имена заданий остаются в секрете.
Работа с паролями с учетом обратной совместимости
Пакет совместимости для PHP версии ниже 5.5
Если вы вынуждены работать с устаревшей версией PHP, младше 5.5, не беспокойтесь и используйте пакет обратной совместимости для функции password_hash()
. Важно всегда стремиться к актуальным технологиям, даже если ваш подход кажется немного устаревшим.
Безопасное обращение с паролями
Люди ценят выбор
Содействуйте использованию сложных паролей. Позволяйте пользователю примерять роль хозяина ситуации, не ограничивая длину пароля или использование разнообразных символов.
Правильное хранение и проверка
Не экономьте на пространстве для хранилища хэшированных паролей, им может требоваться дополнительное место.
При проверке хэшированных паролей используйте методы, защищенные от анализа времени выполнения. Безопасность — наше всё.
Пароли — граждане мира
Учитывайте различные особенности клавиатур и гаджетов, которыми пользуются ваши пользователи по всему миру. Особое внимание уделите разным способам ввода для обеспечения взаиморазумения и добрых отношений.
Внедряйте политику безопасности
Волшебное слово «Абракадабра»! Применяйте лучшие методы обеспечения безопасности для пользовательских паролей. Верьте в свою профессиональную подготовку в области цифровой безопасности.
Полезные материалы
- Хранение паролей – OWASP Cheat Sheet Series — подробная информация от OWASP о безопасном хранении паролей.
- Как лучше всего хранить пароли в базе данных – Stack Overflow — обсуждение SQL-методов для надежного хранения паролей.
- Password Hashing Competition — знакомство с Argon2, лидером среди стандартов безопасного хеширования паролей.
- bcrypt – Википедия — информация о хэшировании паролей с использованием алгоритма BCrypt.
- Почему не следует хэшировать пароли без соли — Почему нельзя просто хэшировать пароли без соли.
- PCI Security Standards Council – Защита платежных данных с помощью промышленных стандартов безопасности, образования и программ — Как стать настоящим рыцарем-джедаем в области защиты паролей в платежных системах.
- Database Security | Oracle — ключевые детали от Oracle о безопасности баз данных.