Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Almacenamiento de passwords en SQL

Iniciado por yens, 12 de Noviembre de 2006, 02:51:30 AM

« anterior - próximo »

yens

Bueno.. nuevamente dudas referentes al tema de páginas web, concretamente a las bases de datos SQL. Estoy probando cosillas referentes al registro de usuarios, con su fecha de registro, nombre, codigo autoincrementado de usuario... etc etc y como no su password para un futuro login en sesiones. El "problema" es que si yo accedo a la base de datos para modificar algunos campos de mi tabla usuarios, veo la contraseña de cada usuario, cuando eso teoricamente no deberia ser asi no? es decir, yo en mi formulario cifro la contraseña en un type password, y se ven *** sin embargo, al pasarlo como varchar a la base de datos, me aperece sin cifrar, y los tipos de datos que he visto por ahi, no veo ninguno que haga referencia a passwords o similares.

Alguna sugerencia? graciñas!!

Zaelsius

Aplíca un hash con MD5 a las contraseñas antes de guardarlas en la BD. Luego cuando un usuario acceda al sistema, vuelves a calcular el MD5 del password proporcionado y lo compruebas con el almacenado. De esa manera no guardas las contraseñas en plano y tampoco puedes recuperarlas, aun siendo el administrador.

http://en.wikipedia.org/wiki/MD5

Si buscas en Google verás implementaciones del algoritmo MD5 para PHP, ASP, etc.. es copiar y pegar.

Alexpi

md5 es la opcion mas usada pero...escuché por ahí que habian crackeado el md5 de php, alguien sabe algo al respecto?¿ pq si es asi...seguridad minima y entonces que otro metodo usar? S:
Juego web www.goldpiece.net

yens

La verdad es que debería empezar a controlar bien el tema de seguridad de php, he de ver si encuentro alguna web con contenido de seguridad al respecto, porque por ahora no hago ningún tipo de comprobaciones ni nada... voy a leer sobre lo que me habéis recomendado a ver que tal..

Gracias!

Vicente

Usa un hash mas grande que el MD5. El MD5 es un hash de 128 bits, pero como todos los hash, solo hace falta la mitad de su longitud para provocar una colisión y romperlo (2^64 intentos para el MD5).

Yo usaría SHA512 como hash mejor. Un saludo!

Vicente

Snakers

Yo probé una vez lo de encriptarlo,si te sirve el codigo,te pongo lo más importante....

Para introducir...

$query="INSERT INTO datos(nick,password) VALUES ('$nick',PASSWORD('$password))";
mysql_query($query,$conexion);

Para login(en mi opinion debe haber otro modo mejor de hacerlo)...

$query2 = "SELECT * FROM datos WHERE password=PASSWORD('$password) ";
mysql_query($query2,$conexion);

yens

Al parecer independientemente del hash que utilice para convertir mis contraseñas, debido a que la conversión la estoy haciendo de lado del servidor, y la contraseña desde el cliente viaja hasta el servidor sin ningún tipo de cifrado, podría darse la posibilidad de que un tercero entrase en medio del envío y recogiese o modificase la contraseña original no?

Por lo que veo lo mejor sería ejecutar el hash de lado del cliente, por ejemplo con un... javascript?¿ y luego enviarlo al servidor no?

Zaelsius

Al atacante le daria igual capturar el hash o la contraseña en texto plano, si eso le permite acceder a la web o servicio deseados. Si quieres que la conexión sea más segura toca usar algo como SSL(https).

De todas maneras, no se trata de hacer algo irrompible(que no existe), sino de algo suficientemente seguro para lo que necesitas.

yens

Sí, entiendo, finalmente usaré md5, pues la función hash no se utiliza en el php4, nos vemos! ya os contare

zupervaca

Solo por avisarte de un problema clasico, es que despues de buscar el nick y la clave en la base de datos compruebas el nick y la clave con los valores obtenidos del select, ya que pueden meter sentencias sql en el nick o la clave y romperte el sistema de login.

yens

No sé si he entendido bien tu supuesto... En breves me meteré con el login de usuarios, si yo quiero ver si un usuario se ha logeado simplemente debo comparar los campos usuario y contraseña con los que ha introducido el, cuál sería el problema?  Supongo que ha si mete lenguaje SQL en esos campos pero... no tendrían por qué ejecutarse no?  :?


yens

Vale, era lo que más o menos pensaba, pero ya veo que no tiene mucha complicación el poder solucionarlo ;)

shephiroth

Recuerda no solo proteger via javascript, sino en php tb, q hoy en día hay herramientas para hacer virguerías xDD

yens

Muy buenas!! Esta tarde le he incado el diente un poco más al tema de php y sql, y ahora mismo que ya consigo introducir datos de usuarios, detectar si ya existe el nombre del usuario registrado, y logearse, estube mirando el tema de manejo de logins mediante cookies...
El problema es que una vez que compruebo si las credenciales son correctas, creo las cookies para nick y password, redirecciono a la pagina principal, en la cual tengo un include para comprobar si las cookies estan activas o no y si coinciden (si es asi, $logincorrecto = true). Para comprobar si el usuario esta logeado utilizo la condicion de si $logincorrecto es true, se me identifique como usuario logeado y se me de la bienvenida a modo de frase, y sino como visitante (solo mediante un simple echo y su frasecita también).

El problema es que si introduzco bien las credenciales, me sigue tratando como un visitante, como si funcionasen las cookies.
Si introduzco mal las credenciales, me funciona bien, es decir me avisa de que no existe el usuario.

Por otra parte, algunas veces visiono un error que hace referencia a las dos lineas de codigo donde defini las cookies por primera vez:
Citarsetcookie("usNick",$nickN,time()+7776000);
setcookie("usPass",$passN,time()+7776000);
Con un mensaje de:
"cannot modify header information - headers already sent by (output started at /home/blabla/ingresar.php:9) in /home/blabla/ingresar.php on line 38
"cannot modify header information - headers already sent by (output started at /home/blabla/ingresar.php:9) in /home/blabla/ingresar.php on line 39

Nosé si me he expresado bien.. pero basicamente llevo como dos horas rebuscando en el código y no veo ningún fallo a priori sencillo xD

pd: Podría usar como alternativa natural las sesiones de usuario en vez de las cookies?