Corregir estructuralmente los bugs de inyección en aplicaciones web

Fuentes: Structurally fixing injection bugs

Los ataques de cross-site scripting (XSS) y de inyección SQL comparten el mismo origen: mezclar entradas del usuario con la representación serializada de una estructura de árbol, como el árbol sintáctico de una consulta SQL o el DOM del HTML. El artículo explica por qué las recomendaciones habituales —"sanear" o "validar" la entrada y escapar la salida de forma manual— son insuficientes para eliminar el problema de raíz, ya que dependen de que cada programador recuerde hacerlo en el lugar adecuado y resultan propensas a errores.

La alternativa propuesta es estructural: tratar los datos con tipos apropiados en lugar de tratarlos como cadenas de texto. En lenguajes fuertemente tipados, esto permite representar el HTML como un árbol en construcción, de modo que la concatenación directa de cadenas deje de tener sentido y la inyección se vuelva imposible por construcción. Además de prevenir XSS, este enfoque garantiza que el HTML resultante esté siempre bien formado y evita la confusión entre funciones que aceptan HTML completo y las que admiten solo texto, una fuente común de bugs difícil de detectar.

El texto recorre varias soluciones existentes —buffers HTML "seguros" en frameworks como Rails o Django, sistemas de plantillas con escape automático en Yesod— y discute sus limitaciones, en particular la dificultad de hacer que un único tipo cadena sea consciente del contexto. Concluye que la seguridad estructural, basada en tipos y árboles, sustituye a la seguridad ad-hoc y reduce la superficie de ataque de las aplicaciones web.