"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo el middleware TrimStrings de Laravel puede causar problemas

Cómo el middleware TrimStrings de Laravel puede causar problemas

Publicado el 2024-11-08
Navegar:797

How Laravel

Laravel es un marco popular en el mundo PHP que ofrece a los desarrolladores excelentes herramientas para simplificar su trabajo. Sin embargo, a veces estas comodidades pueden provocar problemas inesperados. En esta publicación, analizaré cómo el middleware TrimStrings en Laravel puede causar problemas y cómo resolverlos.

¿Qué es el middleware TrimStrings y para qué sirve?

El middleware TrimStrings se utiliza en aplicaciones Laravel para recortar automáticamente los espacios en blanco de los datos de solicitud entrantes, como las entradas de formulario. Esto es particularmente útil cuando los usuarios dejan accidentalmente espacios al principio o al final de los campos de entrada. Por ejemplo, si un usuario ingresa " [email protected] " con espacios alrededor de la dirección de correo electrónico en un formulario, el middleware TrimStrings recortará estos espacios, asegurando que solo se procese "[email protected]". .

Esta característica es beneficiosa para prevenir errores causados ​​por espacios en blanco innecesarios y para manejar datos más limpios. Sin embargo, como siempre, en ciertos casos especiales, este comportamiento predeterminado puede tener consecuencias no deseadas.

¿Qué pasó?

En un proyecto en el que nos estábamos integrando con un proveedor de pagos con sede en Brasil, necesitábamos capturar y validar los resultados de los pagos a través de un sistema de devolución de llamadas. El proveedor de pago envía el resultado de la transacción a nuestro servidor a través de una solicitud POST, y validamos la solicitud realizando una verificación de firma/hash.

Este proceso de verificación sigue una lógica sencilla:

  1. Tomamos los datos enviados por el proveedor.
  2. Todos los datos se concatenan en una sola cadena.
  3. Esta cadena se codifica utilizando el algoritmo SHA256 con una clave secreta proporcionada por el proveedor de pagos.
  4. El hash resultante se compara con el hash enviado por el proveedor. Si coinciden, se acepta la solicitud; en caso contrario, se rechaza.

¿Cómo identificamos el problema?

Al principio, era difícil entender por qué se rechazaban algunas solicitudes válidas. Sin embargo, después de inspeccionar los registros de Nginx, notamos que el parámetro full_name en la solicitud entrante conservaba espacios finales. A pesar de esto, en nuestro servidor, estos espacios se habían recortado, lo que provocó que fallara la verificación del hash. Fue entonces cuando nos dimos cuenta de que el middleware TrimStrings estaba causando este problema.

¿Cuál es la solución?

Para evitar este tipo de problemas, es necesario deshabilitar el middleware TrimStrings para rutas o solicitudes específicas. Laravel 8 introdujo el método TrimStrings::skipWhen, que proporciona una solución personalizada para esta situación.

A continuación se muestra un ejemplo de cómo aplicar esta solución utilizando un proveedor:

use Illuminate\Foundation\Http\Middleware\TrimStrings;
use Illuminate\Http\Request;

// ...

TrimStrings::skipWhen(function (Request $request) {
    return $request->is('api/v1/integrations/foo-provider/callback');
});

Este fragmento de código deshabilita el middleware TrimStrings para una ruta específica. En este caso, no se recortarán las solicitudes provenientes de la ruta api/v1/integrations/foo-provider/callback, lo que garantiza que el proceso de verificación de hash funcione sin problemas.

Conclusión

Las características predeterminadas de Laravel generalmente facilitan las cosas, pero en ciertos escenarios, pueden generar resultados inesperados. Por lo tanto, es importante comprender cómo funcionan las herramientas que utilizamos y evaluar cuidadosamente sus impactos potenciales. Si bien el middleware TrimStrings es una herramienta útil en la mayoría de los casos, puede causar problemas en escenarios como este. Afortunadamente, soluciones flexibles como TrimStrings::skipWhen nos permiten evitar este tipo de problemas.

Declaración de liberación Este artículo se reproduce en: https://dev.to/yidemir/how-trimstrings-can-become-a-problem-for-you-in-laravel-o4k?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3