Nuevo en Symfony 4.3: Validación de la seguridad de las contraseñas
En el ámbito de la seguridad, un "escape de datos" (o "data breach" en inglés) es el acceso por partes no autorizadas a datos de acceso restringido. El ejemplo más conocido es la publicación de las contraseñas de usuarios tras el ataque a sitios web. Solo en los primeros seis meses de 2018, más de 4.500 millones de registros privados se hicieron públicos, incluyendo contraseñas.
Los usuarios de tus aplicaciones que reutilizan contraseñas que han sido expuestas públicamente suponen una amenaza. Por eso han surgido servicios como Have I been pwned? que te permiten comprobar de forma segura si tu contraseña ha sido expuesta.
En Symfony 4.3 hemos añadido un nuevo validador llamado NotCompromisedPassword
que hace uso de ese servicio para comprobar que las contraseñas de tus usuarios
no han sido comprometidas:
// src/Entity/User.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class User { // ... /** * @Assert\NotCompromisedPassword */ protected $rawPassword; }
Internamente, este validador realiza una petición HTTP a la API gratuita del
servicio haveibeenpwned.com
. Esta petición se realiza con el nuevo cliente
HTTP de Symfony, del que hablaremos próximamente en otro artículo.
¿Cómo se comprueban las contraseñas?
Si las contraseñas se enviaran en claro a haveibeenpwned.com
, no tendría mucho
sentido comprobar si han sido expuestas porque acabas de exponerlas
públicamente. En realidad, el servicio utiliza lo que se denomina "k-anonymity
password validation".
Por ejemplo, si tu contraseña es test
, lo primero que se hace es calcular el
hash SHA-1 (en este caso, a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
). De ese
hash, solo se envían los primeros cinco caracteres (a94a8
en este caso). El
servicio haveibeenpwned.com
te devuelve una lista con todos los hashes SHA-1
completos que empiezan por esos caracteres y que están asociados a contraseñas
expuestas públicamente.
Así puedes comprobar de forma segura si tu hash SHA-1 se encuentra en esa lista de hashes comprometidos. Y esto es lo que hace el nuevo validador de Symfony automáticamente.
Esta funcionalidad fue contribuida por Kévin Dunglas en el pull request #27738.
Fuente: New in Symfony 4.3: Compromised password validator
Comentarios
Proyectos Symfony destacados
La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más
Síguenos en @symfony_es para acceder a las últimas noticias.