0Pricing
PHP Academy · Урок

Безопасное хранение паролей

Хешируйте пароли с помощью password_hash и проверяйте их с помощью password_verify

«Безопасное хранение паролей» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Никогда не храните пароли в открытом виде

Хранение паролей в открытом виде означает, что утечка базы данных раскроет пароль каждого пользователя. Всегда храните криптографический хеш — предпочтительно bcrypt, Argon2id или scrypt.

password_hash()

Встроенная функция PHP password_hash() создаёт безопасный хеш со случайной солью, включённой в результат.

<?php
$hash = password_hash("mysecretpassword", PASSWORD_BCRYPT);
// Output: $2y$10$... (includes algorithm, cost, salt, hash)

password_verify()

Проверяйте пароль в открытом виде по сохранённому хешу.

<?php
$hash  = "$2y$10$abcdef...";
$valid = password_verify("mysecretpassword", $hash);
if ($valid) {
    echo "Correct password!";
}

Варианты алгоритмов

PHP поддерживает:

  • PASSWORD_BCRYPT — широко поддерживается, ограничение в 72 байта
  • PASSWORD_ARGON2I — требует большого объёма памяти (PHP 7.2+)
  • PASSWORD_ARGON2ID — рекомендуется, устойчив к атакам с использованием GPU (PHP 7.3+)
  • PASSWORD_DEFAULT — в настоящее время bcrypt, но в будущих версиях PHP может измениться

Фактор сложности

Фактор сложности определяет, насколько медленно вычисляется хеш. Чем выше сложность, тем медленнее атаки методом перебора. Стандартный фактор сложности bcrypt равен 10.

<?php
$hash = password_hash("secret", PASSWORD_BCRYPT, ["cost" => 12]);
// Cost 12 takes ~0.5s on typical hardware — acceptable for login

password_needs_rehash()

После обновления PHP или изменения настроек сложности проверьте, требуется ли обновить существующие хеши.

<?php
if (password_verify($plain, $storedHash) &&
    password_needs_rehash($storedHash, PASSWORD_DEFAULT)) {
    $user->update(["password" => password_hash($plain, PASSWORD_DEFAULT)]);
}

Фасад Hash в Laravel

Laravel оборачивает password_hash в фасад Hash, по умолчанию используя bcrypt.

<?php
use Illuminate\Support\Facades\Hash;

$hash  = Hash::make("mysecretpassword");
$valid = Hash::check("mysecretpassword", $hash); // true

Argon2 в Laravel

Настройте Laravel на использование Argon2id в config/hashing.php.

// config/hashing.php
"driver" => "argon2id",

Обработка соли

Современные функции хеширования PHP автоматически добавляют криптографически случайную соль. Никогда не реализуйте собственное добавление соли — легко допустить ошибку.

Перец (секрет на уровне приложения)

Дополнительный секрет (перец), хранящийся вне базы данных, можно смешать с данными перед хешированием. Даже если база данных будет украдена, злоумышленник не сможет выполнить перебор без перца.

Сравнение за постоянное время

password_verify() использует внутри сравнение за постоянное время, предотвращая атаки по времени выполнения. Никогда не сравнивайте хеши с помощью ==.

Итоги

Используйте password_hash() с PASSWORD_DEFAULT или PASSWORD_ARGON2ID. Проверяйте пароли с помощью password_verify(). При необходимости повторно создавайте хеш при входе. Никогда не храните пароли в открытом виде и не используйте MD5/SHA1 для паролей.

Быстрая проверка

Какая функция проверяет пароль по хешу, созданному PHP?

Часто задаваемые вопросы

Урок «Безопасное хранение паролей» бесплатный?

Да — полный текст урока «Безопасное хранение паролей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Безопасное хранение паролей»?

Хешируйте пароли с помощью password_hash и проверяйте их с помощью password_verify Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Безопасное хранение паролей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Защита от межсайтового скриптинга (XSS)
  2. SQL-инъекции и параметризованные запросы
  3. Защита от CSRF
  4. Безопасное хранение паролей
← Назад к PHP Academy