Foros del Web » Programando para Internet » PHP »

PHP,Javascript y encriptación

Estas en el tema de PHP,Javascript y encriptación en el foro de PHP en Foros del Web. Hola gente, Estoy intentando aplicar seguridad a una website. Básicamente quiero que el password sea encriptado al enviarse (tanto al darse de alta un user ...
  #1 (permalink)  
Antiguo 30/08/2005, 09:31
Avatar de renton  
Fecha de Ingreso: enero-2004
Ubicación: BCN (PPCC)
Mensajes: 573
Antigüedad: 13 años, 10 meses
Puntos: 1
PHP,Javascript y encriptación

Hola gente,
Estoy intentando aplicar seguridad a una website. Básicamente quiero que el password sea encriptado al enviarse (tanto al darse de alta un user como al validarse) para que nadie pueda "snifarlo"; pero no veo muy claro el tema:
Según este artículo de Maestrosdelweb, la cadena de texto puede encriptarse con el algoritmo MD5 de esta forma tan simple:

Código:
<? 
$contrasena = md5($contrasena); 
?>
Pero claro, como esto se hace en servidor, el password no ha salido desde el cliente encriptado, con lo que no ganamos nada ya que cualquiera puede pillarlo en su "viaje" al server.

Así pues, he visto que desde el mismo JAVASCRIPT se puede ya encriptar con MD5 utilizando un .js, lo que arreglaria este problema.

De todas formas, sigo sin verle el sentido: MD5 no permite desencriptar, con lo que si un user se da de alta escribiendo "hola" como password y el .js le encripta dicho password a u3h4u3hju3345h45u (x ejemplo), en bd se guarda eso.
No sería mas lógico que una vez en el server, la rista se desencriptase y volviese a ser "hola"?? Para que me sirve entonces?

Un saludo!
__________________
"No et limites a contemplar aquestes hores que ara venen, baixa al carrer i participa.
No podran res davant un poble unit, alegre i combatiu!!"
  #2 (permalink)  
Antiguo 30/08/2005, 09:50
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 13 años, 7 meses
Puntos: 0
Bueno, al registrarse por primera vez si lo veo muy complicado encriptar y mandarle un aviso por correo al usuario con su cuenta y contraseña, pero, en caso de que una vez se haya registrado, y enviado a su email un seudonimo y contraseña, entonces si tendría sentido lo de encriptar en JavaScript al autentificarse en una Web, porque en la Bd estaría la contraseña encriptada y pues solo se haría una comparación, obviamente sin revocación de contraseña. En otro caso, la idea es que primero al dar un guardar al formulario se envíe al email del usuario su cuenta y contraseña, después esa misma contraseña encriptarla en la BD, y de ahí implementar la cuestión del MD5 de JavaScript.

No sé pues, a ver si surge una mejor idea.
__________________
Julio Hernández

Última edición por jchernandez; 30/08/2005 a las 10:03
  #3 (permalink)  
Antiguo 30/08/2005, 14:34
 
Fecha de Ingreso: junio-2002
Mensajes: 243
Antigüedad: 15 años, 6 meses
Puntos: 1
Yo lo q hago es...

con el js de javascript q dices...en el formulario de registro...cuando le das al boton de enviar encripta el pass y lo envia al server...entonces se guarda en la bd encriptado...

cuando el user hace loguin....con el mismo js envia la peticion con el password encriptado...entonces en el server se recupera el pass q hay en la bd q tb esta encriptado y se comparan las cadenas...

el único inconveniente de este sistema es q un usuario si pierde el pass no tiene modo de saberlo y lo unico q se le puede hacer es generar un nuevo pass y mandarselo.

Espero haberte aclarado las dudas...si quieres el js lo dices....

a otra cosa a parte del MD% q es de 128 bits tb hay el SHA-1 q es de 160 bits creo. más seguridad nunca viene mal

Salu2.
  #4 (permalink)  
Antiguo 30/08/2005, 15:40
 
Fecha de Ingreso: octubre-2003
Ubicación: Veracruz, México
Mensajes: 169
Antigüedad: 14 años, 1 mes
Puntos: 0
Creo que en tu caso lo más prudente sería que definieras todo un MODELO o ESQUEMA de seguridad. Yo creo que lo mas conveniente es que utilces la encriptación desde el lado de Apache con SSL.
Y ya que armes un esquema de que harias en cada parte del proceso. De todas formas tampoco te confies mucho de JavaScript recuerda que es posible desactivarlo y pues todo se acaba...
Considero que debes combinar SSL, con PHP y tal vez un poco en JavaScript pero tendria que ir ya diseñando una estrategia.
Para criptografiar en PHP te recomiendo mejor la libreria mcrypt. Y esta si te permite encriptar y desencriptar datos, lo unico es que tienes que activar la libreia e instalar ya sea la dll en caso de windows, o compilar php --with-mcrypt=/DIR
  #5 (permalink)  
Antiguo 30/08/2005, 17:04
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 13 años, 7 meses
Puntos: 0
Cita:
Iniciado por lotusxxl
lo unico q se le puede hacer es generar un nuevo pass y mandarselo.
Pero la cosa está allí, como se lo vas a mandar, si de nuevo vas a generar un nuevo password, lo encriptas suponiedo que javascript esté activado, recoges encriptado en php para enviarlo, lo único que enviarías al usuario es un password encriptado .


La sugerencia de ray rocus es buena
__________________
Julio Hernández
  #6 (permalink)  
Antiguo 30/08/2005, 17:24
 
Fecha de Ingreso: junio-2002
Mensajes: 243
Antigüedad: 15 años, 6 meses
Puntos: 1
Para madnarlo tendrias q mandarselo en texto plano claro...

pero es q con laopcion de poder desencritpar no se si ganas mucho más...

pq igualemnte si se olvida del pass se lo vas a tener q madnar desencriptado...lo unico q ganas es q tenga el mismo pass q antes en vez de uno nuevo.

pero bueno si necesitas poder desencriptarlo pues usa esa libreria...

aunque yo creo q si solo es para passwords el md5 o sha-1 es mas q suficiente.

Salu2.
  #7 (permalink)  
Antiguo 30/08/2005, 18:39
 
Fecha de Ingreso: octubre-2003
Ubicación: Veracruz, México
Mensajes: 169
Antigüedad: 14 años, 1 mes
Puntos: 0
jchernandez, yo creo que el punto que lotusxxl está exponiendo es que realmente cuando tu guardas un dato encriptado no importa que alguien lo vea pues kien tiene la llave es la lógica del sistema.. En todo caso la seguridad radica en que el unico que sabe su password es el usuario.
Por otro lado, y en apoyo a lo que lotus te comenta , en un buen esquema de seguridad un password no se recupera, sino que se le genera uno nuevo temporal que definitivamente deberá viajar en texto plano.. pues no hay otro método, aunque puedes implementar un algoritmo que te genré un password automático con varios caracteres mayúsculas y minúsculas y se lo envias al usuario. Esta clave le permite activar su login y cambiar nuevamente su password ya dentro del sistema, y a este nuevo password lo vuelves a guardar encriptado y listo ! .

En cuanto a la idea de encriptar JavaScript, personalmente, no la considero acertada ni confiable y si a esas vamos, es peor en el aspecto a que si no tienes cuidado un atacante puede tener acceso al mecanismo de encriptación. Y nuevamente te señalo a que si el cliente lo desea puede desactivar los scripts de java y con eso adiós al esquema.
Y si a esas fueramos, a la de usar en el cliente parte del esquema de seguridad preferiria cookies encriptadas.
Sin embargo repito que lo que requieres es armar un esquema y si te preocupa tanto ke alguien cache los datos antes de ke se encripten, creo ke Apache con SSL sería la mejor alternativa, obviamente te tendrías que documentar un poco al respecto.

En caso de que lo encuentres muy complejo, pues vuelvo a recomendar mcrypt, date una vuelta verás que son más completas que md5, pues tu también generas la llave . Y creo que convienen más ke md5, difiriendo con lotus, aunque pues todo radica en que tan segura quieres que sea o deba ser la aplicación.

Espero haber colaborado en el tema.

Un saludo desde Veracruz, México
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:10.