Foros del Web » Programando para Internet » PHP »

¿Es seguro === para paswords?

Estas en el tema de ¿Es seguro === para paswords? en el foro de PHP en Foros del Web. Hola compañeros, haciendo pruebas he podido comprobar que el operador de equivalencia === es mucho mas rápido que la comparación con strcmp pero está compara ...
  #1 (permalink)  
Antiguo 08/03/2012, 15:33
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 2 meses
Puntos: 4
¿Es seguro === para paswords?

Hola compañeros,

haciendo pruebas he podido comprobar que el operador de equivalencia === es mucho mas rápido que la comparación con strcmp pero está compara un hash en MD5 de los strings dados.

Mi pregunta es ¿es totalmente seguro el uso del operador === para paswords? desconozco si existe alguna manera de "engañar" la comparación porque de no ser así no encuentro motivos de haber creado el strcmp comparado en todo caso con ==

Un saludo
  #2 (permalink)  
Antiguo 08/03/2012, 15:45
 
Fecha de Ingreso: noviembre-2011
Mensajes: 26
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: ¿Es seguro === para paswords?

Hola erxaca, yo te digo que no uso === para password(por costumbre), pero no encuentro nada en contra de los ===.Si los vas a usar tenes que especificar los tipos de variables.
Por ejemplo:
Código PHP:
[int]$valor1=392;//tenes que poner entre corchetes que tipo de valor guarda la variable 
Saludos, espero que te haya ayudado.
  #3 (permalink)  
Antiguo 08/03/2012, 15:51
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 7 meses
Puntos: 202
Respuesta: ¿Es seguro === para paswords?

Estás equivocando los conceptos de los operadores lógicos.
No se usa uno u otro porque es más rápido. Tampoco aportan nada a la seguridad.

La diferencia entre == y === radica en que el segundo operador comprueba además de su equivalencia si es del mismo tipo.
Evidentemente tu contraseña va ser un string de 32 caracteres, (MD5) así que no sacas nada diferente usando uno que otro.

Lo mejor ante la duda es mirar el manual de php para ver como funciona un operador lógico:
http://www.php.net/manual/es/languag...comparison.php

De todas formas te dejo un ejemplo:

Código PHP:
<?php

var_dump
== 1);    //true
var_dump== '1');  //true

var_dump=== 1);   //true
var_dump=== '1'); //false

?>
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #4 (permalink)  
Antiguo 08/03/2012, 16:10
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 2 meses
Puntos: 4
Respuesta: ¿Es seguro === para paswords?

IEKK sé que === evalua el tipo y el valor por eso mismo dije
Cita:
strcmp comparado en todo caso con ==
Es obvio que si la contraseña dada es del mismo tipo de dato y mismo valor no debe de haber error con el operador de equivalencia pero e visto ya varios ejemplos de sistemas que usan el strcmp sobretodo en los que hacen mas hincapié en el tema de seguridad pero a efectos prácticos no encuentro diferencia y de ahí mi duda XD
  #5 (permalink)  
Antiguo 08/03/2012, 16:29
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 7 meses
Puntos: 202
Respuesta: ¿Es seguro === para paswords?

Lo único que se me ocurre es que quieran validar por ejemplo que su contraseña sea númerica... pero usando MD5 no le veo la lógica tampoco.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #6 (permalink)  
Antiguo 08/03/2012, 16:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: ¿Es seguro === para paswords?

Lo que pasa es que strcmp no es para ver si dos strings son iguales (sí tiene esa facilidad) pero es más bien para que veas si un string se parece a otro.

Recuerda que un string, es un array de caracteres, y un carácter no es más que un número para la maquina.

strcmp te devuelve -1, sí el string1 es menor al string2, 0, si son iguales, y 1 si es mayor, por lo que este ejemplo te debe de ayudar a distinguir:

Código PHP:
Ver original
  1. $str1 = 'a';
  2. $str2 = 'b';
  3.  
  4. var_dump(strcmp($str1, $str2)); // -1
  5. var_dump($str1 === $str2); // false
  6. var_dump($str1[0] === $str2[0]); // false

Por lo que puedes ver los usos diferentes de cada uno, internamente PHP al comparar dos strings hace uso de strcmp (o sea compara byte por byte), por lo que es igual que uses cualquiera de los dos (ya sea == o strcmp) para obtener el resultado.

Saludos.
  #7 (permalink)  
Antiguo 08/03/2012, 16:38
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 7 meses
Puntos: 202
Respuesta: ¿Es seguro === para paswords?

Cita:
Iniciado por GatorV Ver Mensaje
Por lo que puedes ver los usos diferentes de cada uno, internamente PHP al comparar dos strings hace uso de strcmp (o sea compara byte por byte), por lo que es igual que uses cualquiera de los dos (ya sea == o strcmp) para obtener el resultado.
Entonces si es lo mismo... No, da algún tipo de ventaja ¿No? Yo es que no veo que sea más seguro. Ya me quedé hasta dudando XD
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #8 (permalink)  
Antiguo 08/03/2012, 16:43
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 10 meses
Puntos: 528
Respuesta: ¿Es seguro === para paswords?

Imagino que lo de ser más seguro es por la posibilidad de que alguien encapsule alguna instrucción en la contraseña y al comparar se ejecute, cosa que no debe pasar si nuestra aplicación no tiene agujeros como coladera.
  #9 (permalink)  
Antiguo 08/03/2012, 16:56
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 2 meses
Puntos: 4
Respuesta: ¿Es seguro === para paswords?

Entonces para estos casos veo más apropiado usar el operdor de equivalencia. Simplemente necesitamos saber si es igual, y si es la misma comprobación no hay ninguna diferencia o riesgo.

Pienso que no debería de poder ejecutarse ninguna instrucción ocp001a, como dice GatorV, lo compara byte a byte y en ese caso al ser compilado por PHP, la cadena a comparar (o entero) llevará implicitamente su tipo
  #10 (permalink)  
Antiguo 08/03/2012, 16:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: ¿Es seguro === para paswords?

Pero pues en caso de existir (lo que se conoce como bufferoverflow) existirá también en strcmp ya que es la misma función usada en el nucleo de PHP (que es una comparación binaria).

No hay que dejarnos engañar por lo que vemos, aunque veamos == y strcmp, internamente PHP hace muchas optmizaciones y al final usa la cimentación en C de stcmp para comparar el string de forma más efectiva.

Ahora el compañero dice que usa md5() así que no hay problema ahí ya que la cadena siempre será hasheada, más bien en ese caso debería de verificar que no exista un bug en md5() que permita la ejecución de código (que no existe hasta ahora).

Saludos.
  #11 (permalink)  
Antiguo 10/03/2012, 21:05
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 7 meses
Puntos: 105
Respuesta: ¿Es seguro === para paswords?

Yo prefiero usar el ===

:)
__________________
.: Gildus :.
  #12 (permalink)  
Antiguo 11/03/2012, 07:19
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 4 meses
Puntos: 890
Respuesta: ¿Es seguro === para paswords?

Cita:
Iniciado por gildus Ver Mensaje
Yo prefiero usar el ===

:)
Y por que? Podrías también explicar las ventajas que alcanzas al hacerlo, así aprenderíamos todos..
__________________
Drupal Argentina
  #13 (permalink)  
Antiguo 11/03/2012, 09:41
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 7 meses
Puntos: 105
Respuesta: ¿Es seguro === para paswords?

Antes usaba el strcmp, y hasta en casos sensitivos con el strcasecmp, pero por la practica y mas corto de escribir o por mala costumbre creo que me quede con el ===, pero segun como explican la mayoria que son iguales al usar ambos (creo), por seaca les paso una referencia en cuanto a la velocidad en ambos:

http://snipplr.com/view.php?codeview&id=758

Saludos
__________________
.: Gildus :.

Etiquetas: seguro
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:54.