16 marzo, 2025
Validaci贸n de Textarea en Laravel: C贸mo Evitar C贸digo Malicioso
validar y sanitizar campos textarea en Laravel para evitar inyecciones de c贸digo, XSS y caracteres no deseados. Implementa reglas de validaci贸n s贸lidas

Suscr铆bete a nuestro canal en Youtube
Suscr铆birseLos campos <textarea>
son esenciales para recopilar texto largo (como comentarios o descripciones), pero también son un vector común para ataques como inyección de código malicioso (XSS) . En este tutorial, te enseñamos a validar y sanitizar correctamente un textarea en Laravel.
1. Crear el Formulario con Blade
Define un campo <textarea>
en tu formulario Blade:
blade
<form action="{{ route('guardar.comentario') }}" method="POST">
@csrf
<div class="form-group">
<label for="comentario">Comentario:</label>
<textarea
name="comentario"
id="comentario"
rows="4"
class="form-control @error('comentario') is-invalid @enderror"
placeholder="Escribe tu comentario..."
>{{ old('comentario') }}</textarea>
@error('comentario')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
2. Validación en el Controlador
En el controlador, define reglas para evitar contenido peligroso:
php
public function store(Request $request)
{
$request->validate([
'comentario' => [
'required',
'string',
'min:10', // Mínimo 10 caracteres
'max:1000', // Máximo 1000 caracteres
'not_regex:/<script\b[^>]*>/i', // Bloquear etiquetas <script>
'not_regex:/[<>{}]/', // Bloquear caracteres especiales
],
], [
'comentario.not_regex' => 'El comentario contiene caracteres no permitidos.',
]);
// Sanitizar el texto antes de guardarlo
$comentario = strip_tags($request->input('comentario'));
// Guardar en la base de datos
Comentario::create(['contenido' => $comentario]);
return redirect()->back()->with('success', '¡Comentario guardado con éxito!');
}
3. Sanitización Avanzada
Para permitir HTML seguro (ej: negrita o enlaces), usa el paquete HTML Purifier :
-
Instalar el paquete:
bash
composer require mewebstudio/purifier
-
Configurar en
config/purifier.php
:php
return [
'settings' => [
'default' => [
'HTML.Allowed' => 'b,strong,i,em,a[href],ul,ol,li,p', // Etiquetas permitidas
],
],
];
-
Sanitizar en el controlador:
php
use Purifier;
$comentario = Purifier::clean($request->input('comentario'));
4. Migración para Almacenar el Texto
Crea una tabla para guardar los comentarios:
php
php artisan make:migration create_comentarios_table
Estructura de la migración:
php
public function up()
{
Schema::create('comentarios', function (Blueprint $table) {
$table->id();
$table->text('contenido'); // Campo para el comentario
$table->timestamps();
});
}
5. Buenas Prácticas de Seguridad
-
Nunca confíes en el cliente:
Valida siempre en el servidor, incluso si usas librerías comoHTML Purifier
. -
Evita almacenar HTML si no es necesario:
Usastrip_tags()
para eliminar todo código HTML. -
Escapa la salida en Blade:
Al mostrar el comentario, usa{!! $comentario !!}
con precaución oe($comentario)
para escapar caracteres.
6. Errores Comunes y Soluciones
-
Error: "El comentario contiene código no permitido."
Solución: Ajusta las reglasnot_regex
o usaHTML Purifier
para permitir etiquetas específicas. -
Error: "Maximum execution time exceeded."
Solución: Limita el tamaño del textarea conmax:1000
.
Conclusión
Un campo <textarea>
mal validado puede ser una puerta de entrada para ataques. Con las reglas de validación adecuadas y herramientas como HTML Purifier , puedes proteger tu aplicación sin sacrificar la funcionalidad. Implementa estos pasos y mejora la seguridad de tus formularios hoy mismo.
Leido 744 veces | 0 usuarios
C贸digo fuente no disponible.