Новое в Symfony 5.3: Компонент PasswordHasher

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

По историческим причинам Symfony использует термин «кодирование пароля», когда он действительно должен относиться к «хешированию пароля». Это вызвало некоторую путаницу у людей, изучающих Symfony, поэтому решили исправить это в Symfony 5.3 раз и навсегда.

Вот почему в Symfony 5.3 представляем новый компонент под названием PasswordHasher. Этот компонент извлекает весь существующий код и функции, связанные с «кодировкой паролей», и переименовывает их в «хеширование паролей». Все функции «кодирования» устарели в Symfony 5.3 и будут удалены в Symfony 6.0.

API нового хешера похож на предыдущий и немного ближе к встроенному в PHP API хеширования паролей:

namespace Symfony\Component\PasswordHasher;

interface PasswordHasherInterface
{
    public function hash(string $plainPassword): string;

    public function verify(string $hashedPassword, string $plainPassword): bool;

    public function needsRehash(string $hashedPassword): bool;
}

Этот новый компонент можно использовать независимо от остальных функций Symfony в любом приложении PHP. Для существующих приложений Symfony новый компонент включается автоматически при установке/обновлении пакета безопасности, поэтому вам не нужно вносить какие-либо изменения в свои зависимости.

Влияние на код вашего приложения будет незначительным, но вам может потребоваться внести некоторые незначительные изменения. Например, команда security:encode-password теперь называется security:hash-password. Служба security.password_encoder теперь называется security.password_hasher, UserPasswordEncoderInterface теперь называется UserPasswordHasherInterface и т. д.

Основное изменение будет в конфигурации безопасности, где вам нужно заменить кодировщики на password_hashers:

# config/packages/security.yaml
-encoders:
+password_hashers:
     App\Entity\User:
         algorithm: 'auto'