Pregunta

Estoy haciendo algo como lo siguiente:

SELECT * FROM table WHERE user='$user';
$myrow = fetchRow() // previously I inserted a pass to the db using base64_encode ex: WRM2gt3R=

$somepass = base64_encode(

Estoy haciendo algo como lo siguiente:

<*>

Siempre obtengo errores, incluso hago eco de $ somepass y $ myrow [1] son ??lo mismo, pero siguen siendo errores. ¿Qué estoy haciendo mal? Gracias

POST['password']); if($myrow[1] != $somepass) echo 'error'; else echo 'welcome';

Siempre obtengo errores, incluso hago eco de $ somepass y $ myrow [1] son ??lo mismo, pero siguen siendo errores. ¿Qué estoy haciendo mal? Gracias

¿Fue útil?

Solución

Intente usar var_dump en lugar de echo, tal vez uno de ellos tenga un espacio o una nueva línea al principio / final.

Editar:

Debe almacenarlo como CHAR (40): Una cadena de longitud fija que siempre se rellena a la derecha con espacios a la longitud especificada cuando se almacena

Use VARCHAR o trim()

Otros consejos

Si $ myrow [1] es realmente la contraseña correcta en la codificación base64, no veo ningún error.

Prueba esto al final:

echo "<br />$myrow[1] != $somepass";

¿Qué dice?

Y, por cierto, no veo ningún motivo para codificar en base 64 las contraseñas. ¿Qué estás tratando de lograr?

Creo que de alguna manera si hago un var_dump () obtengo:

cadena (40) " YWRraM2 = " cadena (8) " YWRraM2 = "

parece que de alguna manera si inserto los datos en la base de datos usando la consola, se agrega un espacio adicional al campo de pase.

myplacedk: ¿hay alguna razón por la que no debería hacerlo? Pensé que agregaría una leyer adicional de seguridad?

Esta codificación hace dos cosas:

  1. Agrega código, haciéndolo más complejo y más fácil cometer errores
  2. Si ve su base de datos en su pantalla y alguien mira por encima de su hombro, las contraseñas pueden ser un poco más difíciles de recordar.

Entonces no, realmente no agrega ninguna seguridad. Es solo una codificación, es fácil de decodificar.

Tal vez lo estés confundiendo con md5-hashing o algo así.

Jugar es bueno, pero cuando se trata de seguridad, realmente recomiendo no usar algo que no entiendas. A la larga, hará más daño que bien.

Algunos problemas:

  • Por sus comentarios en otra parte, supongo que el problema con el código actual es que el campo de su base de datos es CHAR (40). Un campo CHAR siempre tiene un tamaño fijo. Intente cambiar el tipo de campo de la base de datos a VARCHAR en lugar de CHAR.

  • El uso de base64_encode antes de almacenar en una base de datos está lejos de ser seguro. Una buena práctica es almacenar solo un hash unidireccional de la contraseña en la base de datos, normalmente md5 o (mejor) sha1. Luego, cuando el usuario quiera iniciar sesión, use la misma función hash en la contraseña proporcionada y luego compare los dos hashes.
    Esto tiene la ventaja adicional de trabajar con contraseñas de más de 40 caracteres también.
    Un hash sha1 o md5 siempre ocupa una cantidad fija de espacio, por lo que si sigue esta ruta, no tiene que cambiar la columna de su base de datos a VARCHAR :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top