Los 25 errores de programación más peligrosos


Según el estudio publicado por el insituto SANS con el apoyo de numerosas organizaciones, estos son los 25 errores más comunes que hacen de la informática un polvorín:

Interacción insegura entre componentes:

  • Validación de parámetros de entrada inapropiada
  • Codificación o escapado de parámetros de salida inapropiados
  • No preservar la estructura de las peticiones SQL (Inyección de SQL)
  • No preservar la estructura de la web (Cross-Site Scripting)
  • No preservar la estructura de los comandos del sistema operativo (Inyección de comandos del SO)
  • Transmisión en claro de información sensible
  • Suplantación de identidad al hacer peticiones de información (Cross-site request forgery)
  • Condiciones de carrera
  • Filtrado de mensajes de error


Gestión de recursos arriesgada:

  • No limitar las operaciones que ocurren dentro de los límites de un buffer de memoria (Buffer Over/Underflow)
  • Control externo sobre datos críticos de estado
  • Control externo sobre nombre de archivo o ruta
  • Ruta de búsqueda no confiable
  • No controlar la generación de código (Inyección de código)
  • Download de código sin chequeos de integridad
  • Cierre o liberación de recursos de manera inapropiada
  • Inicialización inapropiada
  • Calculos incorrectos

Malas defensas:

  • Control de acceso inapropiado (autentificación)
  • Uso de un algoritmo de criptografía roto o arriesgado
  • Passwords imbuídos en el código (Hard-coded passwords)
  • Asignación de permisos insegura a un recurso crítico
  • Uso de valores aleatorios predecibles
  • Ejecución de código con privilegios innecesarios
  • Forzar contoles de seguridad del servidor en el lado del cliente

Personalmente, me he encontrado con casi todos ellos en algún momento y aunque algunos pueden resultar sencillos de identificar y resolver, otros pueden llegar a dar verdaderos dolores de cabeza.

El de los valores aleatorios me ha recordado uno de los comics de xkcd:

, , ,

  1. No comments yet.
(will not be published)