Tecnología

Inicio

¿Qué es la saturación de búfer de manejo de cadenas?

Los agujeros de seguridad en el software pueden venir en más formas que los programadores pueden imaginar. Uno de estos ataques es el desbordamiento del búfer, cuando un atacante proporciona más información que un programa puede manejar. En particular, los escenarios de programación, como la programación del sistema o de programación de bajo nivel C, tampones de cuerdas son vulnerables a la explotación. Ciertas técnicas de manejo de cadenas se pueden emplear para prevenir estos ataques. Estas técnicas incluyen el seguimiento del tamaño de la cadena, comprobar los límites de amortiguamiento y el uso de las funciones de seguridad de cadena de manipulación.

Cadena BUFFE

Cuando los programadores escribir código para controlar la entrada del usuario textual, que de entrada a menudo se mueve a través de un tampón o variable. Tampón "saturación" se produce cuando el programador no crea un buffer de tamaño suficiente para manejar la entrada del usuario. La entrada no se detiene cuando se detiene el búfer. Más bien, el programa guarda el texto en la memoria inmediatamente después de la memoria intermedia, que podría sobrescribir datos cruciales programa. desbordamientos de búfer cadena ocurren con mayor frecuencia cuando los programadores no comprobar adecuadamente la entrada del usuario.

Comprobación de los límites

La entrada del usuario a menudo puede extenderse más allá de los límites de una matriz debido a la mala comprobación de límites. Particularmente en C, donde las cadenas se representan como matrices de caracteres, insertar y manipular cadenas en estas matrices pueden llegar a ser complicado. Es posible calcular mal los valores de índice de matriz y sobrescribir ubicaciones en la memoria fuera de la formación. Al incluir siempre código que comprueba los límites de la matriz para garantizar que no se sobrescriben, el programador puede limitar el acceso de cadena a la matriz.

Utilizar grandes almacenes

En lenguajes de alto nivel, como C # o Java, el programador puede utilizar objetos de entrada específicos que contienen grandes cantidades de memoria. BufferedReader de Java es un buen ejemplo de esto. El usuario puede crear este objeto con un gran cabrón o un palo con su gran tamaño de búfer predeterminado para manejar la entrada. El objeto entonces se encarga de texto en el búfer. En los lenguajes de bajo nivel como C, el programador normalmente va a matrices de utilización de caracteres. En ese caso, el programador tiene que asegurarse de que la matriz de caracteres recepción de datos sigue siendo lo suficientemente grande como para manejar cualquier tamaño de los datos concebible.

Utilizar las funciones de seguros

Por lo que va la entrada del usuario, el lenguaje de programación C emplea diferentes funciones para diferentes operaciones de entrada. No todas estas opciones son seguras. Por ejemplo, el Gets función no comprueba la entrada del usuario en absoluto, y permitirá que nada pase en el programa. La función strcpy no realizará ninguna comprobación de límites. En cambio, otras funciones seguras deben ser empleados, tales como los FGETS o funciones strncpy.