Нарушение данных – это преднамеренное или непреднамеренное предоставление защищенной или частной/конфиденциальной информации ненадежной среде. Список нарушений данных увеличивается с каждым днем, и только в первой половине 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, который вскоре представим в отдельном сообщении в блоге.