Laravel - Protección CSRF
CSRF se refiere a ataques de falsificación de sitios cruzados en aplicaciones web. Los ataques CSRF son las actividades no autorizadas que realizan los usuarios autenticados del sistema. Como tal, muchas aplicaciones web son propensas a estos ataques.
Laravel ofrece protección CSRF de la siguiente manera:
Laravel incluye un complemento CSRF incorporado, que genera tokens para cada sesión de usuario activa. Estos tokens verifican que las operaciones o solicitudes sean enviadas por el usuario autenticado en cuestión.
Implementación
La implementación de la protección CSRF en Laravel se analiza en detalle en esta sección. Los siguientes puntos son notables antes de continuar con la protección CSRF:
CSRF se implementa dentro de los formularios HTML declarados dentro de las aplicaciones web. Debe incluir un token CSRF validado oculto en el formulario, para que el middleware de protección CSRF de Laravel pueda validar la solicitud. La sintaxis se muestra a continuación:
<form method = "POST" action="/profile">
{{ csrf_field() }}
...
</form>
Puede crear cómodamente aplicaciones impulsadas por JavaScript utilizando la biblioteca HTTP de JavaScript, ya que esto incluye el token CSRF para cada solicitud saliente.
El archivo es resources/assets/js/bootstrap.js registra todos los tokens para aplicaciones de Laravel e incluye meta etiquetar qué tiendas csrf-token con Axios HTTP library.
Formulario sin token CSRF
Considere las siguientes líneas de código. Muestran un formulario que toma dos parámetros como entrada:email y message.
<form>
<label> Email </label>
<input type = "text" name = "email"/>
<br/>
<label> Message </label> <input type="text" name = "message"/>
<input type = ”submit” name = ”submitButton” value = ”submit”>
</form>
El resultado del código anterior es el formulario que se muestra a continuación, que el usuario final puede ver:
El formulario que se muestra arriba aceptará cualquier información de entrada de un usuario autorizado. Esto puede hacer que la aplicación web sea propensa a varios ataques.
Tenga en cuenta que el botón enviar incluye funciones en la sección del controlador. lospostContactLa función se utiliza en los controladores para las vistas asociadas. Se muestra a continuación:
public function postContact(Request $request) {
return $request-> all();
}
Observe que el formulario no incluye ningún token CSRF, por lo que la información confidencial compartida como parámetros de entrada es propensa a varios ataques.
Formulario con token CSRF
Las siguientes líneas de código le muestran el formulario rediseñado utilizando tokens CSRF:
<form method = ”post” >
{{ csrf_field() }}
<label> Email </label>
<input type = "text" name = "email"/>
<br/>
<label> Message </label>
<input type = "text" name = "message"/>
<input type = ”submit” name = ”submitButton” value = ”submit”>
</form>
La salida lograda devolverá JSON con un token como se indica a continuación:
{
"token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
"name": "TutorialsPoint",
"email": "[email protected]"
}
Este es el token CSRF creado al hacer clic en el botón Enviar.