InicioBlogLaravel

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

Autor: J. Luis, 16 marzo, 2025

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

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 1061 veces | 0 usuarios

C贸digo fuente no disponible.

Compartir link del tutorial con tus amigos

Codea Applications

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