InicioBlog

16 marzo, 2025

Validaci贸n de Textarea en Laravel: C贸mo Evitar C贸digo Malicioso

#Laravel

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

Validaci贸n de Textarea en Laravel: C贸mo Evitar C贸digo Malicioso

Suscr铆bete a nuestro canal en Youtube

Suscr铆birse

Los 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 :

  1. Instalar el paquete:

    bash

    composer require mewebstudio/purifier

  2. Configurar en config/purifier.php:

    php

    return [

    'settings' => [

    'default' => [

    'HTML.Allowed' => 'b,strong,i,em,a[href],ul,ol,li,p', // Etiquetas permitidas

    ],

    ],

    ];

  3. 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

  1. Nunca confíes en el cliente:
    Valida siempre en el servidor, incluso si usas librerías como HTML Purifier.

  2. Evita almacenar HTML si no es necesario:
    Usa strip_tags() para eliminar todo código HTML.

  3. Escapa la salida en Blade:
    Al mostrar el comentario, usa {!! $comentario !!} con precaución o e($comentario) para escapar caracteres.


6. Errores Comunes y Soluciones

  • Error: "El comentario contiene código no permitido."
    Solución: Ajusta las reglas not_regex o usa HTML Purifier para permitir etiquetas específicas.

  • Error: "Maximum execution time exceeded."
    Solución: Limita el tamaño del textarea con max: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.

Compartir link del tutorial con tus amigos


Curso de Laravel b谩sico

USD 0.00

Descarga del c贸digo fuente

Curso de Laravel b谩sico

Codea Applications

M茅xico, Colombia, Espa帽a, Venezuela, Argentina, Bolivia, Per煤