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

Publicada el

4 de junio de 2019

Etiquetas

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.