CSRF
Clase 15 de 25 • Curso de PHP con Laravel
Contenido del curso
Clase 15 de 25 • Curso de PHP con Laravel
Contenido del curso
Daniel Hurtado
Eduardo Antonio Sanchez Hincho
Ivan Mendez
Jorge Cardoso
Jimmy Buriticá Londoño
Enrique Devars
Gerardo Antonio Gerónimo Vasconcelos
Jansenio Gonzales Venegas
Jansenio Gonzales Venegas
Jansenio Gonzales Venegas
Mauricio Avila Beltran
Enrique Garcia Stave
Luis Antonio
David Andrés Rincón Suárez
alejandro villegas
Edward Suarez
Jhonathan Alfonso
Usuario anónimo
Jhonathan Alfonso
Paul Cortes
Jhonathan Alfonso
jean pierre gabriel nieto acosta
Cristian Florez
Jhonathan Alfonso
Daniel Guzman
Jansenio Gonzales Venegas
Jansenio Gonzales Venegas
Germán QL
Jimmy Buriticá Londoño
luis alejandro castañeda varon
Cristian Mora
Geraldo Sosa
Angel Enrique Barrios
Japheth Calzada López
Jansenio Gonzales Venegas
Jansenio Gonzales Venegas
Jansenio Gonzales Venegas
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');
Cual sería la diferencia si coloco
return redirect(route('expense_reports.index'));
Lo probé y funciona, o da la mismo de una u otra forma?
¿como hago para poner mi pagina en mantenimiento con middleware?
Escribe en tu terminal:
php artisan down --message "Voy a hacer pipi" --retry=60
y para salirte de mantenimiento:
php artisan up
Les comparto el link de la documentación de CSRF desde la página oficial de ++Laravel++. https://laravel.com/docs/7.x/csrf
Gracias por el aporte :)
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">×</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
Hola amigo como hicistes para que te genere el @csrf ??
Hola amigo como hicistes para que te genere el @csrf ??
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.
efectivamente lo que comenta kike es correcto, según el video en las funciones :
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.
Vamos dandole!
Super :)
Jajaja estamos teniendo un ataque :D
Excelente el uso del CSRF
Recuerda que actualizaron los comando ahora se puede usar
@csrf
en mi formulario no da ningun error cuando no le pongo @csrf ¿por que?
{{csrf_field()}}
Hola jenapi, este comando lo actualizaron y ahora también puedes usar el @scrf, osea:
{{ csrf_field }} === @scrf {{ method= 'PUT'}} === @method('PUT')
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();
Hola amigo como hicistes para que te genere el @csrf ??
Hola amigo como hicistes para que te genere el @csrf ??
Y si alguien enviara una petición POST externa a nuestra dirección /expense_reports incluyendo el parámetro **_token ** De igual forma serviría ?
Ten en cuenta que el token cambia cada vez que cargamos la página. En teoría no es posible que lo puedan saber.
no por que el token cambia y es muy dificil reproducir el mismo token
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
no me genera nigun input
lo solucione !!! {{ csrf_field() }}
esto agrege entre el from y el input.. Apunten compañeros