Las clases StringUtils
y SecureRandom
se añadieron en la versión 2.2 de Symfony.
El componente de seguridad de Symfony incluye una serie de utilidades relacionadas con la seguridad. Estas utilidades han sido diseñadas principalmente para que las use Symfony, pero tú también puedes utilizarlas si las necesitas.
13.11.1. Comparando cadenas de texto
El tiempo que se tarda en comparar dos cadenas de texto depende de cuántas diferencias existan entre ellas. Un atacante puede aprovechar este hecho por ejemplo cuando las dos cadenas representan contraseñas, lo que se conoce como Timing Attack.
Al comparar dos contraseñas, Symfony utiliza internamente un algoritmo que siempre tarda el mismo tiempo en comparar las dos cadenas. Si quieres utilizar la misma estrategia, haz uso de l aclase StringUtils
:
use Symfony\Component\Security\Core\Util\StringUtils;
// ¿es password1 igual a password2?
$bool = StringUtils::equals($password1, $password2);
13.11.2. Generando números aleatorios seguros
Siempre que tengas que generar un número aleatorio de forma segura, te aconsejamos que utilices la clase SecureRandom
:
use Symfony\Component\Security\Core\Util\SecureRandom;
$generator = new SecureRandom();
$random = $generator->nextBytes(10);
El método nextBytes()
devuelve una cadena aleatoria con una longitud igual al número de caracteres pasado como segundo parámetro (10, en el ejemplo anterior).
La clase SecureRandom
funciona mejor cuando la librería OpenSSL está instalada en el servidor. Cuando no está disponible, la clase utiliza un algoritmo interno que requiere un archivo llamado seed o semilla. Para crearlo, solamente tienes que indicar la ruta de un archivo como argumento:
$generator = new SecureRandom('/some/path/to/store/the/seed.txt');
$random = $generator->nextBytes(10);
Nota El contenedor de servicios de Symfony también proporciona un acceso directo al generador de números aleatorios mediante el servicio security.secure_random
.