8. Programación Segura
Criterios de seguridad para incrementar la seguridad del código producido. Capítulo basado en el
documento
OWASP: Secure Coding Cheat Sheet, publicado por Owasp Foundation.
8.1 Validar Todas las Entradas.
Implementar correctamente un módulo de validación de entradas es un desafío complejo. Se
recomienda utilizar librerías de validación de código abierto, reconocidas y con mantenimiento activo
para el lenguaje elegido.
Debe ejecutarse una validación sobre todas las entradas que lea la aplicación, en un equipo confiable y
configurado en forma segura. Nunca debe confiarse en un control ejecutado en un equipo del usuario.
Siempre se debe realizar la validación antes de procesar los datos de entrada.
Es preferible realizar la validación utilizando un criterio de “lista blanca”: prohibir todo y permitir
deliberadamente casos aceptables. Cuando una validación falla, debe rechazarse los datos de entrada.
Es una buena práctica centralizar las rutinas de validación para facilitar su mantenimiento.
entrada_1_sucia = parametro_get()
query_base_datos(entrada_1_sucia)
// NUNCA procesar entradas sin antes validarlas.
entrada_1_sucia = parametro_get()
entrada_1_limpia = validar(entrada_1_sucia)
query_base_datos(entrada_1_limpia)
Esta recomendación resuelve los problemas vinculados a ataques de inyección, XSS (Cross Site
Scripting).
8.2 Codificar apropiadamente todas las salidas.
En ocasiones se usan entradas controladas externamente para generar contenido dinámico. Se debe
controlar estrictamente el formato y los posibles valores de los resultados de módulos hacia
componentes externos.
nombre_usuario_sucio = parametro_get()
generar_html(nombre_usuario_sucio)
// Permite atacar el navegador de los usuarios.
nombre_usuario_sucio = parametro_get()
nombre_usuario_limpio = codificar(nombre_usuario_sucio)
generar_html(nombre_usuario_limpio)
Esta recomendación resuelve los problemas vinculados a ataques XSS: phishing, robo de sesiones, robo
de
información
privada,
distribución
de
malware.
IF-2021-76718462-APN-DNCIB#JGM
Página 18 de 35
Select target paragraph3
Connect to a paragraph
Connect to an entity
Disable highlights
Add to table of contents