Aprende a proteger tu aplicación contra ataques maliciosos y datos corruptos.
Cada vez que un usuario rellena un campo en tu sitio, existe un riesgo. Desde errores accidentales hasta intentos de inyección de código. Laravel ofrece un escudo robusto mediante la protección CSRF y un sistema de validación que te permite dormir tranquilo por las noches.
1. Protección CSRF: El Guardián de tus Formularios
El Cross-Site Request Forgery es un ataque que engaña al usuario para que ejecute acciones no deseadas en un sitio donde ya está autenticado. Laravel protege tus rutas POST, PUT y DELETE automáticamente.
Para que un formulario sea aceptado, debes incluir la directiva @csrf. Esta genera un campo oculto con un token único que Laravel verificará al recibir la petición.
<form action="/perfil" method="POST">
@csrf {{-- ¡Obligatorio! --}}
<input type="text" name="name">
<button type="submit">Actualizar</button>
</form>
2. Manejo de Peticiones (The Request Object)
En lugar de usar las superglobales de PHP como $_POST, Laravel nos entrega un objeto Request inyectado en el controlador. Este objeto es una navaja suiza para inspeccionar los datos entrantes.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ContactController extends Controller
{
public function store(Request $request)
{
// Obtener un solo campo
$name = $request->input('name');
// Verificar si existe un archivo
if ($request->hasFile('avatar')) {
// ... lógica de guardado
}
// Obtener todos los datos como un array
$allData = $request->all();
}
}
3. Reglas de Validaciones Básicas
La validación se puede hacer directamente en el controlador usando el método validate(). Si la validación falla, Laravel redirige automáticamente al usuario hacia atrás con todos los errores y los datos previos.
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|unique:posts|max:255',
'body' => 'required|min:10',
'email' => 'required|email',
'age' => 'nullable|integer|min:18',
]);
// Si llega aquí, los datos son válidos
Post::create($validated);
}
4. Visualización de Errores en Blade
Cuando la validación falla, Laravel guarda los errores en una variable mágica $errors disponible en todas tus vistas. También podemos usar la directiva @error para resaltar campos específicos.
<label for="email">Correo Electrónico</label>
<input type="text" name="email" value="{{ old('email') }}"
class="@error('email') is-invalid @enderror">
@error('email')
<div class="alert alert-danger">{{ $message }}</div>
@enderror
{{-- Función old(): Recupera lo que el usuario escribió para que no tenga que rellenar todo otra vez --}}
5. Form Requests: Limpiando el Controlador
Para formularios grandes, lo ideal es mover la lógica de validación a su propia clase. Esto mantiene tus controladores increíblemente limpios.
Comando: php artisan make:request StorePostRequest
// En el controlador, solo tipamos el nuevo objeto
public function store(StorePostRequest $request)
{
// Los datos ya vienen validados automáticamente
Post::create($request->validated());
}
Dato Clave: Laravel incluye más de 90 reglas de validación listas para usar, desdeacceptedpara términos y condiciones, hastadimensionspara validar el tamaño de una imagen.