Новое в Symfony 4.3: Валидатор проверки паролей

Нарушение данных – это преднамеренное или непреднамеренное предоставление защищенной или частной/конфиденциальной информации ненадежной среде. Список нарушений данных увеличивается с каждым днем, и только в первой половине 2018 года было раскрыто около 4,5 миллиарда записей, включая пароли пользователей.

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

В Symfony 4.3 добавили новое валидатор NotCompromisedPassword, чтобы проверить, что данный пароль не был скомпрометирован:

// src/Entity/User.php
namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class User
{
    // ...

    /**
     * @Assert\NotCompromisedPassword
     */
    protected $rawPassword;
}

Внутренне ограничение делает HTTP-запрос к API, предоставленному веб-сайтом haveibeenpwned.com. В запросе валидатор не отправляет необработанный пароль, а только первые несколько символов результата его кодирования с использованием SHA-1.

Например, если необработанный пароль является тестовым, хеш SHA-1 имеет вид a94a8fe5ccb19ba61c4c0873d391e987982fbbd3, а валидатор отправляет только a94a8 на haveibeenpwned.com (первые пять символов хеша SHA-1). Это называется «проверка пароля k-анонимности» и полностью объясняется в этом блоге Cloudflare.

HTTP-запрос выполняется с помощью нового компонента HttpClient, добавленного в Symfony 4.3, который вскоре представим в отдельном сообщении в блоге.