10 errores de programación y codificación más comunes
Los siguientes son algunos de los errores de programación y codificación más comunes cometidos por los desarrolladores. Estos errores han resultado en interrupciones generalizadas, robo de datos, intrusiones y más. Algunos de los errores Los 10 sitios web principales para códigos de error y solución de problemas Los 10 sitios web principales para códigos de error y solución de problemas Leer más son específicos de ciertos idiomas como C, C ++, etc., pero algunos son comunes en otros idiomas como Java, JavaScript, Python, etc..
Le recomendamos que revise esta lista con frecuencia para asegurarse de que no está haciendo ninguno de estos en su código. Esta lista está ordenada en orden de importancia de arriba a abajo..
1. Desbordamiento de búfer
El desbordamiento de búfer se produce cuando los datos se escriben en un búfer más allá de su final. Puede surgir debido a cálculos erróneos de la posición de escritura. O escritura continua en un búfer sin verificar la longitud. Cualquiera sea la razón, este error es uno de los más comunes y se ha traducido en grandes hazañas. Algunos de estos incluyen los virus informáticos de Morris Internet Worm 6 que cambiaron el mundo 6 virus informáticos que cambiaron el mundo Ayer echamos un vistazo a algunos de los virus informáticos de alto perfil más dañinos de la historia, y hoy exploraremos algunos de ellos. los más oscuros en cambio. El termino “virus” no se adjuntó al malware ... Leer más en 1988, gusano W32 / Nimda en 2001 y error de Sendmail en 2003.
A C Ejemplo:
matriz char [6] = "hola"; strcat (array, ", joe"); / * <- This line causes a buffer overflow. */
2. Inyección de SQL
Inyección SQL ¿Qué es una inyección SQL? [MakeUseOf explica] ¿Qué es una inyección SQL? [MakeUseOf Explica] El mundo de la seguridad de Internet está plagado de puertos abiertos, puertas traseras, agujeros de seguridad, troyanos, gusanos, vulnerabilidades de cortafuegos y una gran cantidad de otros problemas que nos mantienen en alerta todos los días. Para usuarios privados,… Leer más es una técnica para inyectar comandos SQL en la entrada del usuario, de modo que la base de datos ejecuta directamente estos comandos. Esto permite al atacante realizar actos maliciosos, como eliminar tablas, eliminar bases de datos, robar datos y mucho más..
Una causa clave de los ataques de Inyección de SQL que tienen éxito es que el software de la aplicación que procesa la entrada del usuario realiza comprobaciones y validación insuficientes en la entrada antes de pasarla a la base de datos para su ejecución.
Un ejemplo de Java:
// El siguiente es un valor de parámetro con el nombre de usuario de la cadena de inyección SQL = "joe '; eliminar del usuario donde el nombre de usuario es'%"; Conexión con =…; // crear conexión a la base de datos // Cuando se ejecuta esta declaración, todos los usuarios se eliminan de la base de datos. con.createStatement (). execute ("actualizar usuario establecido log_in = 1 donde username = '" + username + "'");
3. Inyección de comandos OS
La Inyección de comandos del sistema operativo se produce cuando la entrada especificada por el usuario se entrega directamente al sistema operativo para que la aplicación la ejecute sin la verificación adecuada. Una aplicación de este tipo podría ser utilizada por una aplicación para usar un comando existente en el sistema operativo. Cuando la aplicación pasa la entrada del usuario sin validarla adecuadamente, allana el camino para que un atacante utilice construcciones inteligentes para ejecutar comandos maliciosos. Estos comandos pueden ser, por ejemplo, para eliminar archivos, robar datos, alterar permisos en archivos y más.
4. Desbordamiento de enteros o envoltura
Un entero Los conceptos básicos de la programación de computadoras 101 - Variables y tipos de datos Los conceptos básicos de la programación de computadoras 101 - Variables y tipos de datos Habiendo introducido y hablado un poco sobre la programación orientada a objetos antes y de dónde viene su nombre, pensé que es hora de que hagamos lo básico de la programación en un lenguaje no específico. Esto ... Leer más Se produce un error de desbordamiento cuando intenta almacenar un valor mayor en un tipo integral que no corresponda. Cuando esto sucede, el valor mayor se trunca y la operación termina almacenando un resultado impredecible. Por ejemplo, un corto sin signo de 2 bytes puede almacenar un valor máximo de 65535. Ahora, imagine que agrega dos valores cortos como 65530 y 10 y almacena el resultado en un corto. El resultado (65545) no cabrá en un corto, dejando un valor impredecible en el objetivo corto como resultado del truncamiento. Cuando posteriormente utilice este valor en otra operación (como un índice de matriz), obtendrá resultados impredecibles.
A C Ejemplo:
corto a = 65530, b = 10; corto c = a + b; // en mi computadora, c tiene el valor inesperado: 4
5. Validación inadecuada de un índice de matriz
Otro error muy común encontrado en el software es Validación inadecuada de un índice de matriz. Surge al acceder a una matriz Cómo funcionan las matrices y listas en Python Cómo funcionan las matrices y listas en Python Las matrices y listas son algunas de las estructuras de datos más útiles en la programación, aunque pocas personas las utilizan en todo su potencial. Lea más utilizando un índice que se encuentra fuera de los límites de la matriz. Cuando accede a una ubicación fuera de los límites de datos válidos del programa, termina con un error de acceso a la memoria (también conocido como una violación de segmentación). Cuando la ubicación de la memoria se encuentra dentro de los límites de los datos pero fuera de la matriz, está observando la corrupción de la memoria cuando escribe en dichas ubicaciones.
Este tipo de errores son más comunes con C y C ++, pero pueden surgir en cualquier idioma, incluso en aquellos con administración de memoria automática como Java, JavaScript, Python, etc. La única forma de mitigar dichos errores en el software es usted. Programador, ejerciendo suficiente cuidado durante la codificación..
6. Asignar recursos sin límites
La asignación de memoria es muy común en C y C ++, ya que toda la administración de memoria en estos idiomas es manual. La asignación de memoria sin la validación adecuada del tamaño que se asigna puede hacer que la asignación falle. Cuando el resultado de esta asignación no se verifica, pero se usa directamente, tiene una receta para el desastre.
Este tipo de errores también son posibles sin la administración manual de la memoria como Java, JavaScript y Python cuando se asignan matrices. Por lo tanto, se debe tener el cuidado adecuado al asignar matrices en estos idiomas..
Otra posibilidad de que surja este error es crear otros recursos, como identificadores de archivos o identificadores de conexión, sin una comprobación adecuada. No cerrar correctamente estos recursos cuando haya terminado de usarlos es la forma más común de alcanzar estos límites de recursos.
7. Dereferencia de puntero expirada
En lenguajes como C y C ++, la memoria se puede liberar una vez que haya terminado con ella. Uso de un puntero Una introducción a los punteros para los programadores Una introducción a los punteros para los programadores Ya sea que se dé cuenta o no, la gran mayoría de los programas que ha utilizado hacen uso de los punteros de alguna manera. Como programador, debe comprender cómo funcionan los punteros. Leer más a este bloque de memoria que ya se ha liberado es un error. Este tipo de error también ha estado en las noticias debido a las interrupciones importantes, por lo que debería verificar que este tipo de error no ocurra en su código..
8. Desreferencia de puntero nulo
Un puntero puede tener un valor nulo antes de que se inicialice correctamente (o después de que se libere la memoria). La anulación de la referencia a dicho puntero provoca un error de puntero nulo (llamado Excepción de puntero nulo en Java). Es muy común en C, C ++ y en Java, y definitivamente también es posible en otros idiomas. Debe tener suficiente cuidado en su código para evitar este tipo de error.
9. Inicialización faltante
Las variables locales son aquellas que se declaran dentro de una función (o un bloque) y dejan de existir al final de la función. Estas variables se asignan en la pila y tendrán basura aleatoria cuando se declaran por primera vez. Como programador, es su deber asignar un valor adecuado a estas variables tan pronto como se declaren. Usándolos antes de tales resultados de inicialización en el Inicialización faltante error y definitivamente terminará en un choque (o algo más devastador).
A C Ejemplo:
int pos; char buffer [] = "hola mundo"; // esta línea puede imprimir basura y / o puede bloquear el programa ya que pos no está inicializada. printf ("El valor del carácter en pos% d es:% c \ n", pos, buffer [pos]);
10. Algoritmo criptográfico roto o arriesgado
El mundo de la criptografía ¿Cómo funciona el cifrado, y es realmente seguro? ¿Cómo funciona el cifrado, y es realmente seguro? Leer más está en constante evolución. Lo que es aceptable hoy puede que ya no sea aceptable mañana. Esto podría deberse al aumento del poder de las computadoras en las que las tareas informáticas que se consideren demoran hoy en día pueden demorar minutos en el futuro. O alguien encuentra una nueva forma de descifrar un algoritmo particular que hace que ese algoritmo sea inútil. Por lo tanto, debe mantenerse constantemente al tanto de los desarrollos en criptografía y actualizar su código (si todavía está en uso) si se descubren vulnerabilidades y piruetas en los algoritmos que usa..
Por ejemplo, SHA-1, que es un algoritmo de hash, ya no se recomienda para calcular hashes. En 2005, se descubrieron ataques contra este algoritmo, y se recomiendan SHA-2 o SHA-3. Por lo tanto, si su código utiliza SHA-1 en cualquier momento, deberá reemplazarlo con el recomendado si aún se está utilizando el software. De lo contrario, corre el riesgo de que su aplicación esté abierta al ataque..
Resumen
Hemos cubierto algunos de los errores de programación y codificación más comunes en este artículo. Puede consultar esta lista a menudo para asegurarse de que los está evitando..
¿Ha encontrado estos u otros errores que podrían conducir a un hackeo a gran escala de su sitio web o aplicación? Háganos saber en los comentarios a continuación..
Crédito de la imagen: ajfile / Depositphotos
Explorar más sobre: Hacking.