¿Cuáles son los errores más peligrosos en la programación de C?
por ejemplo, el uso incorrecto de strcpy
provoca un desbordamiento de pila e inyección de código.
Estoy buscando al menos 10 patrones de programación incorrectos en C.
Creo que la mejor manera de aprender la respuesta a esta pregunta es leer un montón de libros y hacer las mejores prácticas. Le aconsejo este libro Codificación segura en C y C ++ para todos los temas sobre codificación segura en c.
El error más peligroso en la programación de C es usar C . Esta es una afirmación impopular, pero décadas de experiencia me respaldan.
C es un lenguaje de programación agradable porque le permite expresar operaciones en una "máquina abstracta" (así es como lo pone el estándar C) que se traducirá de manera eficiente en código de máquina (las herramientas de traducción se ejecutan rápidamente y el resultado es rápido). Sin embargo, esta traducción tiene un precio alto, es decir, que no es una garantía de errores, y hay muchos "comportamientos indefinidos" que acechan en las sombras. Reglas de aliasing de punteros , por ejemplo, casi nunca se entienden correctamente, lo que lleva a un código aparentemente bueno que fallará (a veces de maneras que crear vulnerabilidades explotables) cuando se utiliza un compilador más nuevo o se activa un interruptor de optimización.
Buscar una "lista de errores" es la mentalidad incorrecta. Usted quiere una lista negra: cosas que deben evitarse, bajo el supuesto de que "todo lo demás" es seguro. Debería querer una lista blanca : una lista de permitidas formas de desarrollo, excluyendo todo lo demás. Los programadores de C exitosos son programadores que pueden mantener su propia disciplina para nunca usar cualquier construcción que no dominen de extremo a extremo; y por "masterización" me refiero a la capacidad de describir cómo el compilador de C traducirá eso en códigos de operación de ensamblaje, incluidas todas las optimizaciones posibles que los compiladores de C pueden realizar.
Una buena manera de "usar C" es escribir las una o dos rutinas que realmente necesitan velocidad en una C optimizada, y el resto del código en un lenguaje más seguro que permita más rápido, más fácil y más seguro. desarrollo (por ejemplo, Python, C #, Node.js, Perl ... la elección es grande).
Puede consultar Los 25 errores de software más peligrosos de CWE / SANS . Esto es para el desarrollo de software en general (independiente del lenguaje de programación) pero también incluye errores cometidos en C / C ++.
Lea otras preguntas en las etiquetas known-vulnerabilities software secure-coding c