Skip to main content

Por Qué Gets No Está Definido En C

La funci n gets () es una de las funciones m s peligrosas y poco confiables en el lenguaje de programaci n C. esta funci n est dise ada para Leer una cadena de una secuencia de entrada. Pero debido a que no verifica el Tama o del b fer en el que se almacenar la cadena, abre la puerta a una gran cantidad de posibles vulnerabilidades y ataques en el programa.

En la documentaci n del lenguaje C y en los manuales de programaci n, la funci n gets () se considera obsoleta e insegura. En su lugar, se recomienda usar la funci n fgets (), que es m s segura, ya que verifica los l mites del b fer y no permite la reescritura de la memoria.

Por ejemplo, si escribe una cadena que es m s larga que el Tama o del b fer asignado para almacenar la cadena, la funci n gets() sobrescribir la memoria fuera del b fer, lo que puede provocar un bloqueo del programa o la inyecci n de c digo malicioso.

En este sentido, la funci n gets () ha sido declarada obsoleta en el est ndar C11 y puede ser eliminada por completo del lenguaje en el futuro. Por lo tanto, los programadores deben utilizar alternativas seguras para Leer cadenas de la secuencia de entrada para garantizar la seguridad y la estabilidad de sus programas.

  1. Cu l es la raz n de la falta de gets en el lenguaje C?
  2. Historia de la creaci n del lenguaje C
  3. Vulnerabilidades y problemas con la funci n gets
  4. Funciones de entrada alternativas en el lenguaje C

Cu l es la raz n de la falta de gets en el lenguaje C?

El lenguaje de programaci n C, desarrollado a principios de la d cada de 1970, tiene muchas funciones para la entrada y salida de datos. Sin embargo, la biblioteca est ndar de C carece de la funci n gets. Veamos las razones de esta ausencia.

  1. Inseguridad de la funci n: la raz n Principal de la falta de gets en el lenguaje C se debe a su inseguridad. La funci n gets no verifica el Tama o del b fer en el que se realiza la entrada de datos y puede causar un desbordamiento del b fer. Esto puede conducir a un comportamiento inesperado del programa, incluidas vulnerabilidades como el desbordamiento del b fer y la posible ejecuci n de c digo malicioso. Debido a esto, la funci n gets fue declarada obsoleta y eliminada del est ndar de lenguaje desde la revisi n C11.

  2. Alternativas: La ausencia de la funci n gets en la biblioteca Est ndar C no significa que no haya capacidad para ingresar una cadena desde el teclado. En su lugar, puede usar la funci n fgets, que verifica el Tama o del b fer y deja de Leer despu s de alcanzar la longitud especificada o cuando se encuentra un car cter de nueva l nea. Esto lo convierte en una alternativa segura para obtener la entrada del usuario.

  3. Recomendaciones para desarrolladores: se recomienda a los Desarrolladores que utilicen funciones de entrada de l nea m s seguras, como fgets o scanf, con una indicaci n expl cita del Tama o m ximo del b fer. Esto ayuda a evitar el desbordamiento del b fer y aumenta la seguridad del programa.

En general, la falta de la funci n gets en el lenguaje C se debe a su posible inseguridad y la disponibilidad de alternativas m s seguras. Los desarrolladores deben ser conscientes de las posibles vulnerabilidades asociadas con el uso incorrecto de las funciones de entrada de l nea y aplicar las medidas de seguridad adecuadas al desarrollar programas en el lenguaje C.

Historia de la creaci n del lenguaje C

El lenguaje de programaci n C fue desarrollado en la d cada de 1970 en Bell Labs (originalmente llamado AT&T Bell Laboratories) por Dennis Ritchie. Cre C como una mejora del lenguaje de programaci n anterior B, que fue desarrollado por Ken Thompson.

El objetivo de crear el lenguaje C era proporcionar flexibilidad y eficiencia en la programaci n a nivel de sistema. Ritchie y Thompson quer an crear un lenguaje de programaci n universal que pudiera usarse para desarrollar sistemas operativos y otros programas de sistemas.

El lenguaje C fue dise ado como un lenguaje de bajo nivel, lo que significa que ofrec a acceso directo a la memoria y los registros de la computadora, lo que permit a a los desarrolladores crear c digo eficiente y optimizado. Sin embargo, tambi n proporcion algunas abstracciones y herramientas que lo hicieron m s c modo y flexible de usar, en comparaci n con otros lenguajes de bajo nivel.

Una de las caracter sticas m s importantes de C es su portabilidad. El lenguaje fue dise ado para que pueda ejecutarse en una variedad de arquitecturas de computadora y sistemas operativos sin cambios en el c digo del programa. Este fue un factor importante para los laboratorios Bell, ya que utilizaron diferentes computadoras y sistemas operativos para su trabajo de investigaci n.

Con el tiempo, C se hizo popular y se utiliz para una variedad de prop sitos. Se convirti en el lenguaje de programaci n principal para el desarrollo de sistemas operativos UNIX, y m s tarde para muchos otros sistemas operativos. C tambi n se ha convertido en un lenguaje de programaci n ampliamente utilizado para el desarrollo de software de aplicaciones, sistemas de gesti n de bases de datos, aplicaciones web y m s.

La historia del lenguaje C est relacionada con varias versiones y est ndares, como ANSI C e ISO C. Hicieron varias mejoras y adiciones al lenguaje, lo que aument su estandarizaci n y portabilidad.

C sigue siendo uno de los lenguajes de programaci n m s populares en todo el mundo. Su simplicidad, eficiencia y flexibilidad lo convierten en una opci n atractiva para los desarrolladores de diversos campos. Contin a evolucionando y adapt ndose a las nuevas tecnolog as y requisitos de desarrollo de software.

Vulnerabilidades y problemas con la funci n gets

La funci n gets est obsoleta y es peligrosa para su uso en la programaci n en lenguaje C. Sus problemas se deben a la falta de comprobaciones de desbordamiento del b fer de entrada, lo que la hace vulnerable a ataques como el desbordamiento del b fer (buffer overflow).

Los problemas con la funci n gets tienen que ver con su capacidad para Leer una cadena de la entrada est ndar y almacenarla en el b fer especificado, pero sin verificar el Tama o del b fer. Esto significa que si la cadena ingresada excede el Tama o del b fer, la funci n gets puede sobrescribir las regiones de memoria adyacentes, lo que puede provocar un comportamiento de programa incontrolado o incluso la posibilidad de ejecutar c digo malicioso.

Este problema es especialmente cierto cuando se trabaja con matrices de caracteres, que son cadenas. Si la funci n gets se usa para Leer la entrada del usuario en una matriz de caracteres y luego esa matriz se pasa a otras funciones sin verificar el Tama o, los atacantes pueden usar esta capacidad para inyectar c digo malicioso o sobrescribir datos importantes.

Por un lado, el problema se puede resolver mediante el uso de funciones de lectura de cadenas m s seguras, como fgets, que le permite especificar el n mero m ximo de caracteres para Leer. Esto evita el desbordamiento del b fer. Otra opci n es usar funciones que realicen comprobaciones de Tama o de b fer, como usar funciones de la biblioteca string.h.

Por otro lado, los programadores deben tener especial cuidado al usar la funci n gets. Siempre deben asegurarse de que el Tama o del b fer sea lo suficientemente grande como para aceptar la fila esperada y tener suficiente espacio para almacenar los datos. Si se desconoce el Tama o del b fer, la mejor soluci n podr a ser usar alternativas m s seguras para evitar posibles vulnerabilidades.

Funciones de entrada alternativas en el lenguaje C

La funci n gets en el lenguaje C est obsoleta y no se recomienda debido a vulnerabilidades de desbordamiento de b fer. Puede causar problemas de seguridad graves, como sobrescribir la memoria y ejecutar c digo de forma remota.

En lugar de gets, se recomienda usar la funci n fgets, que le permite especificar el n mero m ximo de caracteres para Leer desde el flujo de entrada. Esto ayuda a evitar el desbordamiento del b fer y mejora la seguridad del programa. La funci n fgets devuelve un puntero a la cadena que est leyendo, o NULL en caso de error.

Puede utilizar las funciones fscanf o scanf para Leer valores de un tipo espec fico, como enteros o n meros de punto flotante. La funci n fscanf Lee los datos de un archivo o entrada est ndar (stdin) y los formatea de acuerdo con el formato especificado. La funci n scanf funciona de manera similar, pero solo Lee datos de la entrada est ndar.

Cuando se trabaja con la l nea de comandos, una opci n es usar la funci n getchar, que Lee un solo car cter de la secuencia de entrada. Puede usar la funci n fgets con el par metro stdin para Leer una cadena de caracteres antes de un car cter de nueva l nea.

Sin embargo, aunque las funciones de entrada alternativas mejoran la seguridad, a n se debe tener cuidado al tratar con la entrada del usuario. Se recomienda verificar la correcci n de los datos de entrada y verificar la posibilidad de desbordamiento del b fer antes de escribir o procesar.