La seguridad en el desarrollo de software no es un «parche» que se añade al final, sino una mentalidad. En el centro de esta mentalidad están la sanitización y la validación, dos procesos que actúan como el sistema de aduanas de tu aplicación para prevenir ataques como Inyección SQL, Cross-Site Scripting (XSS) o ejecución remota de código.

1. Validación de Datos (Check-in)

La validación es el proceso de verificar si los datos de entrada cumplen con los requisitos esperados antes de que el sistema los procese. Es una política de «si no es exactamente lo que pedí, no entra».

Aspectos clave de la validación:

  • Tipo de dato: ¿Es un número entero, un string o un booleano?
  • Formato: ¿Cumple con una estructura específica (ej. correo electrónico, fecha YYYY-MM-DD)?
  • Rango/Longitud: ¿Tiene el número de caracteres permitido? ¿Está el valor entre 1 y 100?
  • Presencia: ¿Es un campo obligatorio o puede ser nulo?

Regla de oro: Siempre utiliza una Lista Blanca (Allow-list). En lugar de intentar prohibir caracteres «malos», define únicamente los caracteres y formatos que están permitidos.

2. Sanitización de Datos (Limpieza)

La sanitización es el proceso de «limpiar» o transformar los datos de entrada para que sean seguros al ser utilizados en un contexto específico. Se usa cuando no puedes simplemente rechazar el dato, sino que debes neutralizar posibles amenazas.

Técnicas comunes:

  • Escapado (Escaping): Convertir caracteres especiales en entidades seguras. Por ejemplo, transformar <script> en &lt;script&gt; para evitar que el navegador lo ejecute como código.
  • Eliminación (Stripping): Quitar etiquetas HTML o caracteres no deseados de una cadena de texto.
  • Casteo (Casting): Forzar un dato a un tipo específico (ej. convertir "123" a un int puro).

3. Implementación Práctica: Defensa en Profundidad

Para que la seguridad sea efectiva, debes aplicar estas capas en diferentes puntos de tu arquitectura:

A. Validación en el Frontend (UX)

Es útil para mejorar la experiencia del usuario (mensajes de error instantáneos), pero nunca es suficiente. Un atacante puede saltarse las validaciones de JavaScript fácilmente usando herramientas como Postman o cURL.

B. Validación en el Backend (Seguridad Real)

Aquí es donde ocurre la validación crítica. Cada punto de entrada (API, formularios, carga de archivos) debe tratar la entrada del usuario como intrínsecamente peligrosa.

C. Sanitización según el Contexto

Un dato puede ser seguro para guardarse en la base de datos pero peligroso al mostrarse en el navegador.

  • Para Base de Datos: Usa Consultas Preparadas (Prepared Statements). Esto separa el comando SQL de los datos, haciendo imposible la inyección SQL.
    • Ejemplo: SELECT * FROM users WHERE id = ? (El ? es el marcador de posición).
  • Para el Navegador (HTML): Escapa los datos antes de renderizarlos para prevenir XSS.