Inicio
Buscar
Ingresar
Registrarse
Starfield: el juego que revolucionará el espacio y la tecnología
Hack x Crack - Comunidad de Seguridad informática
»
Programación
»
C / C++
»
[consulta] Funciones de copia de cadenas seguras en C
Imprimir
Páginas: [
1
]
Ir Abajo
Autor
Tema: [consulta] Funciones de copia de cadenas seguras en C (Leído 3130 veces)
0x00
{ L0 } Ñuub
Mensajes: 18
[consulta] Funciones de copia de cadenas seguras en C
«
en:
Mayo 07, 2014, 02:16:02 am »
Buernas, estoy cursando Tecnico programador universitario, es el primer año y estoy en programacion I y laboratorio I viendo C bajo borland en DOS, la verdad mucho feo, el tema es que el profe enseña pero no le da mucha bola a lo que es la seguridad, siendo que a mi me interesa mucho, porque si se programa que se algo seguro, por que si se aprende asi en un futuro todos esos chicos van a programar con huecos de seguridad, el tema es el siguiente, queria saber si hay alguna funcion que haga una copia de cadena desde el teclado a una variable pero de forma segura, porque el "metodo" que enseño no me convence para nada, es el siguiente:
Código: C
#include<stdio.h>
#include<conio.h>
#include<string.h>
void
main
(
void
)
{
char
aux
[
100
]
,
nombre
[
20
]
;
printf
(
"Dame tu nombre: "
)
;
gets
(
aux
)
;
// esta es la funcion insegura que me gustaria evitar
while
(
strlen
(
aux
)
>
19
)
{
printf
(
"reingre el nombre, es muy largo"
)
;
gets
(
aux
)
;
}
strcpy
(
nombre.
aux
)
;
}
el tipo dice que no hay nombre de 100 caracteres, pero el problema no es el usuario comun, sino una mal intencionado que puede desbordar el buffer de la variable aux.
busque pero no encontre nada por internet, alguno sabe de algo??
___
edited
___
modificado el bloque de codigo a C
«
Última modificación: Mayo 08, 2014, 04:06:27 pm por b10s_0v3rr1d3
»
En línea
ksha
Project Member
{ L2 } Nativo Digital
Mensajes: 80
Re:[consulta] Funciones de copia de cadenas seguras en C
«
Respuesta #1 en:
Mayo 07, 2014, 03:49:00 pm »
la verdad que el strcpy es bastante inseguro, debido a que no comprueba el espacio del destino.
por ejemplo aux tiene un largo de 100 (100-1) y nombre tiene un largo de 20 (20-1), por ende si llenas la variable aux con sus 100 caracteres, y lo copias con el strcpy este generara un buffer overflow.
se recomienda utilizar las siguientes funciones para realizar las copias:
strncpy
wcsncpy
stpncpy
en las universidades, facultades, colegios, escuelas, etc.... no les interesa la seguridad, a mi me paso lo mismo en el tiempo que estudie, es lamentable ... te aconsejo que averigues por tu parte y si tienes dudas preguntalas. encantado te ayudo para que te sea mas facil.
espero que te sirva de algo la respuesta.
En línea
C_printfer
Visitante
Re:[consulta] Funciones de copia de cadenas seguras en C
«
Respuesta #2 en:
Mayo 07, 2014, 04:26:26 pm »
Bueno... yo soy muy fanático de C, pocos como yo hay. C es muy criticado debido a que permite cualquier cosa, y por eso me gusta, C da total libertad al programador. No obstante, tengo que reconocer que hay mejores lenguajes para desarrollo de aplicaciones en tiempo real y mucho más seguros. Si lo habéis escuchado, el fallo de seguridad en SSL (
http://foro.hackxcrack.net/index.php?topic=23416.0
) fue debido a que OpenSSL estaba programado en C. Es decir, depurar al 100% un programa hecho en C es más complicado que en otros lenguajes de programación, como ADA. Cada lenguaje es adecuado para diferentes cosas.
Te cuento eso porque lógicamente es posible copiar una cadena en otra, siendo ambas de diferente longitud, en C sí es posible. Pero en el caso de tu código, estás verificando la longitud de la cadena aux con la sentencia:
Código:
[Seleccionar]
while(strlen(aux) > 19)
Por tanto, en la copia no debería haber problema. Cierto es que si copias en nombre la cadena aux, y aux es de menor longitud, estarás dejando valor basura en las posiciones de memoria del array nombre en las cuales no hayas copiado nada, en las últimas.
Respecto al gets, tampoco habría problema, si se introduce un nombre mayor de 100 caracteres, simplemente en el array no se guardan más caracteres de los permitidos.
Si no me explico dímelo.
Salu2!
«
Última modificación: Mayo 07, 2014, 06:22:28 pm por C_printfer
»
En línea
0x00
{ L0 } Ñuub
Mensajes: 18
Re:[consulta] Funciones de copia de cadenas seguras en C
«
Respuesta #3 en:
Mayo 07, 2014, 10:38:58 pm »
gracias a Ksha y C_printfer por sus respuestas, pero creo q no me explique bien, se que al verificar con la funcion strleg() solamente podre guardar en aux solo 19 caracteres xq ese seria el fin del while, que se introduscan valores hasta ser menos a 19 para llenar el buffer, pero si se fijan bien la funcion gets() no controla la cantidad de datos que va a guardar aux por lo tanto si le pongo 150 caracteres, va a morir el programa antes de entrar en el ciclo repetitivo, por eso queria saber si hay alguna variante segura para gets, cosa q no desborde la variable aux ni siquiera
En línea
ksha
Project Member
{ L2 } Nativo Digital
Mensajes: 80
Re:[consulta] Funciones de copia de cadenas seguras en C
«
Respuesta #4 en:
Mayo 08, 2014, 03:13:35 pm »
no se recomienda utilizar gets, esta deprecado hace años atrás por lo inseguro que es.
gets()
deprecado explicación:
http://crasseux.com/books/ctutorial/gets.html
Alternativa
getline()
:
http://crasseux.com/books/ctutorial/getline.html#getline
intenta compilar tus códigos con
-Wall
si no entiendes la explicación en ingles, me mandas un ping
saludos =)
En línea
C_printfer
Visitante
Re:[consulta] Funciones de copia de cadenas seguras en C
«
Respuesta #5 en:
Mayo 08, 2014, 03:59:52 pm »
0x00, sí te explicaste bien, y te respondí. Cuando usas gets, si metes más caracteres de los que puedes almacenar en el array, simplemente no se van a guardar. Otra cosa es ya que quieras hacer un buen código, entonces habría que tener en cuenta las posibles excepciones que pudieran surgir. Si buscas excepciones en C en Google obtendrás algo de información.
Salu2!
En línea
Imprimir
Páginas: [
1
]
Ir Arriba
Hack x Crack - Comunidad de Seguridad informática
»
Programación
»
C / C++
»
[consulta] Funciones de copia de cadenas seguras en C
Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso...
OK
Learn more