Validación de entradas y codificación de salidas
Valide todas las entradas en el servidor, codifique las salidas en el contexto adecuado y prevenga la inyección.
Validación de entradas y codificación de salidas es una lección gratuita de Cyber Security Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cyber Security Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cyber Security Academy incluye 4 lecciones en total.
Por qué es importante validar las entradas
Las vulnerabilidades de inyección — SQL, comandos, LDAP, XPath y otras — surgen cuando una entrada no confiable se interpreta como código. La validación de entradas garantiza que los datos cumplan los tipos, longitudes y formatos esperados antes de procesarlos, almacenarlos o devolverlos.
Validación mediante listas de permitidos y de bloqueados
La validación mediante una lista de permitidos (allowlist) define lo que SÍ es aceptable: solo caracteres alfanuméricos, solo enteros del 1 al 100 o solo formatos de correo electrónico válidos. Una lista de bloqueados (denylist) intenta bloquear entradas maliciosas conocidas y siempre queda incompleta. Prefiera las listas de permitidos.
Validación en el lado del servidor
La validación del lado del cliente mejora la experiencia de usuario, pero no aporta ninguna seguridad: los atacantes la omiten fácilmente mediante las herramientas de desarrollo del navegador o curl. Valide siempre en el lado del servidor. La validación del lado del cliente es una cortesía; la del lado del servidor es el control de seguridad.
Validación de entradas para distintos tipos de datos
Números: compruebe el tipo y el rango. Cadenas: compruebe la longitud y el conjunto de caracteres. Fechas: analícelas estrictamente y compruebe el rango. Archivos: compruebe la extensión Y los magic bytes/el tipo MIME; nunca confíe únicamente en la extensión. URL: analice y valide los componentes del esquema, el host y la ruta.
Las consultas parametrizadas previenen SQLi
La medida más importante al validar entradas para bases de datos es no concatenar nunca la entrada del usuario en SQL. Utilice consultas parametrizadas (prepared statements), donde la entrada del usuario se pasa como parámetro y no se interpola en la cadena de consulta.
// WRONG:
const q = "SELECT * FROM users WHERE name = '" + name + "'";
// RIGHT:
const q = "SELECT * FROM users WHERE name = $1";
await client.query(q, [name]);Contextos de codificación de salida
La misma cadena requiere una codificación diferente según el contexto. Cuerpo HTML: codificación HTML (< > &). Atributo HTML: codificación de atributos HTML. JavaScript: escape de JS. Parámetro de URL: codificación de URL (codificación porcentual). Utilizar una codificación incorrecta deja brechas que los atacantes pueden explotar.
Codificación HTML contra XSS
No inserte nunca directamente en HTML los datos del usuario. Utilice un motor de plantillas o una biblioteca que aplique automáticamente el escape de HTML. En React, {value} es seguro; dangerouslySetInnerHTML omite el escape. En Django, las plantillas aplican el escape automáticamente, a menos que utilice explícitamente el filtro safe.
Codificación en el contexto de JavaScript
Al insertar datos en JavaScript (por ejemplo, una variable inicializada con datos del usuario), la codificación HTML no es suficiente. Utilice la codificación JSON: JSON.stringify(value). Esto evita que los datos salgan del contexto de un literal de cadena de JS.
Codificación de URL
Los datos proporcionados por el usuario que se insertan en URL deben codificarse porcentualmente mediante encodeURIComponent() (JS) o urllib.parse.quote() (Python). Los datos sin codificar pueden manipular la estructura de la URL, lo que puede provocar redirecciones abiertas o recorrido de rutas.
Content Security Policy como defensa en profundidad
CSP añade una segunda línea de defensa contra XSS. Una CSP estricta que utiliza nonces impide la ejecución de scripts insertados incluso si se inyecta una carga útil de XSS, porque el navegador se niega a ejecutar scripts sin el atributo nonce correcto.
Prevención de XSS basado en DOM
El XSS basado en DOM ocurre cuando JavaScript lee de fuentes controladas por el atacante (location.hash, document.URL, cookie) y escribe en sinks peligrosos (innerHTML, document.write, eval). Audite todos los flujos de datos desde las API del navegador hasta los sinks del DOM mediante herramientas de análisis estático.
Comprobación de conocimientos
¿Por qué es esencial validar las entradas en el lado del servidor incluso cuando se ha implementado la validación del lado del cliente?
Resumen
La validación de entradas (listas de permitidos, comprobación de tipos y límites de longitud), combinada con la codificación de salida sensible al contexto (HTML, JS, URL y parametrización SQL), constituye la defensa principal contra los ataques de inyección y XSS. Ambas deben aplicarse en el lado del servidor sin excepción.
Preguntas frecuentes
¿La lección «Validación de entradas y codificación de salidas» es gratis?
Sí — el texto completo de «Validación de entradas y codificación de salidas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cyber Security Academy, actualiza a CoddyKit PRO. El curso de Cyber Security Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Validación de entradas y codificación de salidas»?
Valide todas las entradas en el servidor, codifique las salidas en el contexto adecuado y prevenga la inyección. Practicas Cyber Security Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Cyber Security Academy?
No se requiere experiencia previa. Cyber Security Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Validación de entradas y codificación de salidas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Cyber Security Academy?
Sí. Cada lección de Cyber Security Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Validación de entradas y codificación de salidas
- Gestión segura de dependencias
- OWASP ASVS: estándar de verificación de seguridad de aplicaciones
- Técnicas de revisión segura de código