Nuevo en Symfony 5.1: Mejoras en el servicio UriSigner

En las aplicaciones Symfony, el servicio relacionado con la clase UriSigner añade una firma en las URLs para evitar su manipulación. Symfony lo utiliza por ejemplo para firmar las URLs de los fragmentos que se usan en funcionalidades como ESI.

En Symfony 5.1, hemos mejorado la clase UriSigner con un nuevo método llamado checkRequest(). Este método permite pasar un objeto de tipo Request en vez de tener que construir la URL a mano:

// Antes
$url = $request->getSchemeAndHttpHost()
    .$request->getBaseUrl()
    .$request->getPathInfo()
    .(null !== ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : '');
 
if ($this->signer->check($url) {
    // ...
}
 
// Después
if ($this->signer->checkRequest($request) {
    // ...
}

Otra mejora introducida en Symfony 5.1 es que el servicio ahora se puede inyectar automáticamente. Solo tienes que añadir el type-hint Symfony\Component\HttpKernel\UriSigner a cualquier argumento de tu controlador o servicio:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\UriSigner;
 
class MyController extends AbstractController
{
    public function someMethod(Request $request, UriSigner $uriSigner)
    {
        if (!$uriSigner->checkRequest($request)) {
            // ...
        }
    }
}

Esta funcionalidad fue contribuida por Yanick Witschi en el pull request #35284 y #35298.


Fuente: New in Symfony 5.1: Improved UriSigner

Comentarios

Publicada el

18 de marzo de 2020

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.