
Mark Lucas
0
2033
74
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 son específicos de ciertos lenguajes 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 nada de esto en su código. Esta lista está ordenada por orden de importancia de arriba a abajo.
1. Desbordamiento de búfer
El desbordamiento del búfer ocurre cuando los datos se escriben en un búfer después de su finalización. Puede surgir debido a cálculos defectuosos 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 ha dado lugar a grandes vulnerabilidades. Algunos de estos incluyen los virus informáticos Morris Internet Worm 6 que cambiaron el mundo 6 virus informáticos que cambiaron el mundo Ayer analizamos algunos de los virus informáticos de alto perfil más dañinos de la historia, y hoy exploraremos algunos de los más oscuros en su lugar. El termino “virus” no estaba asociado al malware ... en 1988, el gusano W32 / Nimda en 2001 y el error Sendmail en 2003.
A C Ejemplo:
char array [6] = "hola"; strcat (matriz, ", joe"); / * <- This line causes a buffer overflow. */
Crédito de imagen: Cyber4All @Towson
2. Inyección 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 en Internet está plagado de puertos abiertos, puertas traseras, agujeros de seguridad, troyanos, gusanos, vulnerabilidades de firewall y una serie de otros problemas que nos mantienen alerta todos los días. Para usuarios privados, ... es una técnica para inyectar comandos SQL en la entrada del usuario de modo que estos comandos sean ejecutados directamente por la base de datos. Esto permite al atacante realizar actos maliciosos como eliminar tablas, soltar bases de datos, robar datos y mucho más..
Una causa clave de que los ataques de inyección SQL tengan éxito es que el software de aplicación que procesa la entrada del usuario realiza verificaciones 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 inyección SQL. String username = "joe '; eliminar del usuario donde nombre de usuario como'%"; Conexión con =…; // crea 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 el conjunto de usuarios login_in = 1 donde username = '" + username + "'");
3. Inyección de comandos del sistema operativo
La inyección de comandos del sistema operativo surge cuando la entrada especificada por el usuario se entrega directamente al sistema operativo para que la aplicación la ejecute sin una verificación adecuada. Dicha operación 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 use 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 envolvente
Un número entero Conceptos básicos de la programación informática 101 - Variables y tipos de datos Conceptos básicos de la programación informática 101 - Variables y tipos de datos Habiendo introducido y hablado un poco sobre la programación orientada a objetos antes y de dónde proviene su nombre, pensé que es hora de que pasemos por lo básico absoluto de programación de una manera no específica del lenguaje. Esto ... Se produce un error de desbordamiento cuando intenta almacenar un valor mayor en un tipo integral del que cabe. 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 agregar dos valores cortos como 65530 y 10 y almacenar el resultado en un corto. El resultado (65545) no cabe en un corto, dejando un valor impredecible en el objetivo corto como resultado del truncamiento. Cuando posteriormente use 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 incorrecta de un índice de matriz
Otro error muy común encontrado en el software es Validación incorrecta de un índice de matriz. Surge cuando se accede a una matriz Cómo funcionan las matrices y listas en Python Cómo funcionan las matrices y listas en Python Las matrices y las listas son algunas de las estructuras de datos más útiles en la programación, aunque pocas personas las utilizan en todo su potencial. usando 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 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á viendo 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 con cualquier lenguaje, incluso aquellos con administración automática de memoria como Java, JavaScript, Python, etc. La única forma en que dichos errores pueden mitigarse en el software es usted, el programador, ejerciendo cuidado suficiente 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 lenguajes es manual. La asignación de memoria sin una validación adecuada del tamaño que se está asignando puede provocar que la asignación falle. Cuando el resultado de esta asignación no se verifica sino que se usa directamente, tiene una receta para el desastre.
Este tipo de errores también es posible sin la administración manual de memoria, como Java, JavaScript y Python al asignar matrices. Por lo tanto, se debe tener cuidado 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 verificación adecuada. No cerrar adecuadamente estos recursos cuando termina de usarlos es la forma más común de alcanzar estos límites de recursos..
7. Expirección del puntero expirado
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 programadores Una introducción a los punteros para programadores Ya sea que se dé cuenta o no, la gran mayoría de los programas que ha utilizado hacen uso de punteros de alguna manera. Como programador, debe comprender cómo funcionan los punteros. para este bloque de memoria que ya ha sido liberado es un error. Este tipo de error también ha aparecido en las noticias debido a 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 liberar la memoria). Anular la referencia de dicho puntero provoca un error de puntero nulo (llamado Excepción de puntero nulo en Java) Es muy común en C, C ++ y Java, y definitivamente también es posible en otros lenguajes. Debe tener el cuidado suficiente en su código para evitar este tipo de error.
Crédito de imagen: J.T.Presta
9. Falta la inicialización
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 declaren por primera vez. Como programador, es su deber asignar un valor adecuado a estas variables tan pronto como se declaren. Usarlos antes de tal inicialización da como resultado Falta la inicialización error y definitivamente terminará en un accidente (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á inicializado. 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? Está en constante evolución. Lo que es aceptable hoy puede que ya no lo sea mañana. Esto podría deberse a la potencia cada vez mayor de las computadoras, donde las tareas informáticas que se considera que toman años hoy pueden tomar minutos mañana. O alguien encuentra una nueva forma de descifrar un algoritmo particular que hace que ese algoritmo sea inútil. Por lo tanto, debe estar 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 ataques 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. Entonces, si su código usa SHA-1 en algún momento, deberá reemplazarlo con el recomendado si el software todavía se está utilizando. De lo contrario, corre el riesgo de que su aplicación esté abierta a ataques.
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 evitarlos..
¿Se ha encontrado con estos u otros errores que podrían conducir a un hack a gran escala de su sitio web o aplicación? Háganos saber en los comentarios a continuación.
Haber de imagen: ajfile / Depositphotos