No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

13 Días
5 Hrs
13 Min
53 Seg

CSRF

15/25
Recursos

CSRF (Cross-site request forgery) es un tipo de ataque que consiste en que un usuario puede intentar hacer muchas peticiones en nombre de otro. Para esto Laravel genera con cada sesión un token que se usará para validar que exista el usuario en el sistema y que sea él quien está haciendo la petición. Esto también implica que no se pueden hacer peticiones desde otra app hacia el post, debe manejarse de manera interna.

Si queremos que un form pueda pasar la seguridad CSRF de Laravel, debemos agregar el helper @csrf el cual nos agrega un token.

  • Cuando estamos guardando nuevas entradas en la base de datos podemos redireccionar adonde queramos en nuestra aplicación con una respuesta especial de Laravel llamada redirect.

Estamos trabajando con Middlewares los cuales son muy usados en aplicaciones web que consisten en capas que contienen el request. Cuando llega un request, éste deberá pasar por diferentes capas o filtros (middlewares) quienes al final regresarán una respuesta. Cada uno de los filtros puede detener las peticiones en caso de que algo no cumpla.

Si no se desea usar la protección CSRF se puede directamente quitar el middleware desde el archivo kernel.php. De la misma manera se pueden crear middleware propios y agregarlos aquí.

Aportes 28

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

En vez de responder una redirección de url, para adaptarnos al funcionamiento de laravel y sus buenas prácticas, podemos realizar una redirección de vista, por ejemplo:

    return redirect()->route('expense_reports.index');

¿como hago para poner mi pagina en mantenimiento con middleware?

Les comparto el link de la documentación de CSRF desde la página oficial de Laravel.
https://laravel.com/docs/7.x/csrf

Mi formulario para dar de alta un cliente. Incluye una pequeña ventana modal de confirmación hecha con Bootstrap:

@extends('layouts.form')

@section('title', 'Nuevo Cliente')

@section('table_name', 'clients')

@section('form_content')
<form action="/clients" method="POST">

  @csrf

  <div class="form-group">
    <label for="client_name">Razón Social</label>
    <input type="text" class="form-control" id="client_name" name="client_name" aria-describedby="nameHelp" placeholder="EMPRESA, S. A. DE C. V.">
    <small id="nameHelp" class="form-text text-muted">Ingresar en mayúsculas tal como aparece en el RFC.</small>
  </div>

  <div class="form-group">
    <label for="client_nickname">Alias</label>
    <input type="text" class="form-control" id="client_nickname" name="client_nickname" aria-describedby="nicknameHelp" placeholder="EMPRESA">
    <small id="nicknameHelp" class="form-text text-muted">El alias es empleado para vistas compactas y la generación de nombres de carpetas.</small>
  </div>

  <div class="form-group">
    <label for="client_custom_location">Domicilio Fiscal</label>
    <input type="text" class="form-control" id="client_custom_location" name="client_custom_location" aria-describedby="locationHelp" placeholder="CALLE, No, LOCALIDAD, CIUDAD, ESTADO">
    <small id="locationHelp" class="form-text text-muted">La ubicaión tal como desee que aparezca en los informes.</small>
  </div>

  <!-- Button trigger modal -->
  <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter">
    Guardar
  </button>

  <!-- Modal -->
  <div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="exampleModalCenterTitle">Advertencia</h5>
          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          ¿Esta seguro que desea guaradr los cambios?
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>
          <button type="submit" class="btn btn-primary">Guardar</button>
        </div>
      </div>
    </div>
  </div>
</form>
@endsection

estoy usando visual code como puedo agregar los prefijos "key "

Si por alguna razón se está usando una versión de laravel inferior, por ejemplo 5.0.16, que es mi caso porque tengo PHP 5.5 no funciona el helper

@csrf()

Se puede usar de forma manual de la siguiente manera

<input type="hidden" name="_token" value="{{ csrf_token() }}">

Apuntes:
Para prevenir ataques de CSRF (acrónimo de Cross-Site Request Forgery), es un tipico ataque en el que el atacante hace multiples peticiones a nombre de otro atacante, por lo que Laravel trae proteccion ante este tipo de ataques a partir de un token, para ello debemos escribir dentro de la etiqueta de formulario ‘@csrf’.
Para proceder a guardar definitivamente los datos en la base de datos, escribimos en el metodo store():
- $variableSave = new ClaseModelo();
- $variableSave->atributo = $request->get(‘nameFOrmulario’);
- $variableSave->save();
- return redirect(’/rutaDeseada’);
El metodo redirect(), es para redireccionarnos a otra vista, una vez que guardemos los datos.
Los middleware son capas que contienen al request y lo validan, cuando llega algun tipo de request, este tiene que pasar por multiples filtros para llegar a su destino (response). Cualquiera de estos filtros puede detener las peticiones.

Vale la pena aclarar que si estamos utilizando Form::open() para crear los formularios (por consiguiente al usar también sus métodos para crear los controles), éste viene con el @csrf incorporado; lo quiere decir que no es necesario llamar a la directiva para realizar este tipo de validación especial (de hecho crea el _token de forma automática).

si yo quiero consumir una api ella en laravel como manejo lo de los tokens dado que las peticiones vienen de distintos servidores

Todo va perfecto.

Super 😃

Excelente el uso del CSRF

en mi formulario no da ningun error cuando no le pongo @csrf ¿por que?

Tengo una tabla personas y otra empleados que estan relacionadas, en un form tengo los datos de la persona y los datos del empleado para darlos de alta, lo correcto es guardar la informacion en persona y el id que me da despues de guardarlo debo de relacionarlo en el campo idpersona dentro de la tabla de empleado, como puedo hacerlo?

        $report = new Persona();
        $report->nombre= $request->get('nombre');
        $report->estatus=1;
        $report->save();
      
	$report = new Empleado();
        $report->numEmpleado= $request->get('empleado');
        $report->idPersona=???;
        $report->save();


Es importante generar un HELPER @csrf para evitar errores como el 419, el csrf podria ser un ataque a nuestro formulario por lo que este HELPER nos aportara un TOKEN par anuestro usuario o sesion, con el fin de enviar correctamente nuestra informacion. Podemos crear MIDDELWARE o capas intermedias para protejer aun mas nuestro sistema en el archivo de KERNEL.

Si usan phpstorm les aparecera Key: si usan visual studio code no aparecera esta.

Tengan cuidado de este detalle al codear

Bien

Buena clase, aunque es mas básico y sencillo que el anterior, para quienes apenas comienzan a usar Laravel les será mas fácil de entender

Al parecer no me reconoce el @csrf lo vizualiza como texto en la pagina

Hola, Cuál es la diferencia entre usar $request->get(‘key’) y $request->key ? Gracias

para protegernos de ataques de CSRF colocamos el “@csrf” que nos ofrece laravel. es esta clase podemos ver como se evita este ataque y también como cargar la bd y de como implementar algunos middlewares.

En el método store, cuando ya nuestra vista envia todos los valores y no necesitamos ninguna otra confirmación, hacemos un $model->create($request);

Excelente el curso, por fin entendi lo del token CSRF!

me da el siguiente error al darle al boton de submit

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException The POST method is not supported for this route. Supported methods: GET, HEAD, PUT, PATCH, DELETE.

¿Cómo se realiza el manejo de tokens si Laravel está siendo usado únicamente como Backend API y las peticiones externas pueden venir de diferentes fuentes (Clientes web, App móvil etc)?

Notas:

  • Ataques CSRF que significa Cross-Site Request Forgery, son ataques donde un usuario podria estar haciendo peticiones en nombre de otro usuario.

  • Para validar que un usuario es el mismo que esta haciendo la peticion y no otro usamos los tokens que generan laravel en cada sesion implementando el helper “@csrf” dentro de la etiqueta formulario.

  • En este caso para generar un nuevo registro en la base de datos, hacemos uso de la accion Store que esta en el controller, recibiendo los parametros que vienen en request obteniendolos con la funcion de laravel get() luego redireccionamos con el metodo redirect() hacia la vista donde estamos listando los resultados.

+Teoria:
Se usan Middlewares los cuales son muy usados en aplicaciones web que consisten en capas que contienen el request. Cuando llega un request, éste deberá pasar por diferentes capas o filtros (middlewares) quienes al final regresarán una respuesta. Cada uno de los filtros puede detener las peticiones en caso de que algo no cumpla.

en verdad es buena practica utilizar ->get() ??
porque no lo veo en la documentación no seria mejor usar ->input() ???

CSRF: Cross-Site Request Frogery, es un método de ataque que sirve para falsificar peticiones HTTP, Laravel provee una forma segura de lidiar contra ello y es con el helper @csrf

Una forma más fácil de crear registros es con el método “create”, es un método más seguro, pero para eso necesitas configurar una propiedad $fillable dentro de tu modelo.

No es recomendable desactivar la validación CSRF, sin embargo, hay veces que necesitamos quitarla en ciertas rutas (Por ejemplo cuando queremos recibir webhooks), para eso Laravel igual provee ciertas formas de quitar la validación CSRF para rutas especificas.