Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Prompt engineering avanzado, Unidad 8 — Seguridad avanzada en prompting, 8.2 — Estrategias defensivas ·

Sanitización de entradas

Sanitización de entradas: Protegiendo a los sistemas ante datos inseguros

Introducción

En la era de la inteligencia artificial y las cadenas de bloques (LLMs), es crucial proteger nuestros sistemas contra ataques maliciosos. La sanitización de entradas se convierte en una medida fundamental para asegurar que nuestro software funcione correctamente y de manera segura, evitando inyecciones de código malicioso y otros tipos de ataques. En este artículo, exploraremos cómo la sanitización de entradas puede proteger a nuestros sistemas ante datos inseguros.

Explicación principal con ejemplos

La sanitización de entradas implica limpiar y validar los datos que se reciben desde fuentes externas antes de procesarlos en el sistema. Este proceso es crucial para evitar inyecciones de código, ataques SQL, XSS (Cross Site Scripting), y otros tipos de ataques maliciosos.

Ejemplo práctico

Supongamos que tenemos una función en Python que recibe texto desde un usuario y lo usa como parte del prompt para generar un texto con un modelo LLM:

def generate_text(user_input: str) -> str:
    prompt = f"Genera un poema sobre {user_input}"
    response = llm.generate(prompt)
    return response

Este código es vulnerable a ataques de inyección de código, especialmente si el usuario ingresa texto malicioso. Para protegernos contra esto, debemos sanitizar la entrada.

Sanitización en Python

Podemos usar bibliotecas como html para eliminar etiquetas HTML y otras funciones de limpieza:

import html

def sanitize_input(user_input: str) -> str:
    # Eliminar etiquetas HTML
    clean_input = html.unescape(html.escape(user_input))
    
    # Filtrar caracteres no deseados (puedes ajustar este conjunto según tus necesidades)
    allowed_chars = set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ")
    clean_input = ''.join(char for char in clean_input if char in allowed_chars)

    return clean_input

def generate_text(user_input: str) -> str:
    sanitized_input = sanitize_input(user_input)
    prompt = f"Genera un poema sobre {sanitized_input}"
    response = llm.generate(prompt)
    return response

Errores típicos / trampas

1. Ignorar la sanitización de entradas

Ignorar completamente la sanitización de entradas puede permitir inyecciones de código, ataques SQL y otros tipos de ataques maliciosos. Este es el error más grave que puedes cometer.

2. Sanitizar con funciones globales o estáticas

Sanitizar las entradas solo en algunas partes del sistema puede dejar brechas de seguridad. Es mejor sanitizar todas las entradas donde se reciban datos desde fuentes externas, no solo en ciertos puntos específicos.

3. No validar el tipo de entrada esperado

No validar si la entrada es realmente lo que esperamos (por ejemplo, un número entero en lugar de una cadena) puede dejar abierta la puerta a ataques. Si esperas un número y recibes una cadena, asegúrate de convertirlo adecuadamente o rechazarlo.

4. No usar bibliotecas actualizadas

Las bibliotecas de sanitización de entrada pueden tener vulnerabilidades si no se mantienen actualizadas. Asegúrate de actualizar tus dependencias regularmente para proteger contra nuevas amenazas.

Checklist accionable

Para asegurarte de que estás haciendo todo lo posible por la seguridad, aquí tienes un checklist:

  1. Sanitiza todas las entradas: Valida y limpia todos los datos antes de procesarlos.
  2. Use bibliotecas actualizadas: Mantén tus dependencias en el sistema actualizadas para evitar vulnerabilidades conocidas.
  3. Valida el tipo de entrada: Verifica que la entrada coincide con lo esperado (por ejemplo, un número entero o una cadena).
  4. Aísla el proceso de datos maliciosos: Si sospechas que los datos pueden ser inseguros, aíslalos del resto del sistema.
  5. Monitorea y actualiza regularmente: Monitorea el rendimiento y la seguridad del sistema y actualiza las medidas según sea necesario.

Cierre con "Siguientes pasos"

La sanitización de entradas es solo un paso en una estrategia más amplia para proteger tus sistemas ante ataques maliciosos. Aquí tienes algunos pasos adicionales:

  • Implementa medidas de autenticación y autorización: Asegúrate de que sólo usuarios autorizados tengan acceso a ciertas partes del sistema.
  • Asegúrate de la integridad del sistema: Utiliza herramientas para detectar cambios no autorizados en el código o los datos.
  • Entrena a tu equipo: Mantén a todos los miembros del equipo al día sobre las amenazas actuales y cómo protegerse contra ellas.

La seguridad es un proceso continuo, y la sanitización de entradas es solo una parte importante.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).