es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mi función password_verify para un valor de la base de datos siempre devuelve falso.

include("src/database.php"); #este archivo incluido funciona bien
$query=mysqli_query($conn,"SELECT * FROM students LIMIT 1");
$data=mysqli_fetch_assoc($query);
echo "Mi contraseña encriptada es ".$data["password"]." y la contraseña actual es 12345678.
"; if(password_verify("12345678",$data["password"])){ echo "Finalmente esto funcionó."; }else{ echo "ESTO SIEMPRE SE EJECUTA."; } #ahora no puedo codificar los datos directamente porque los $ los interpreta como variables dentro de un string #este es el dato encriptado $2y$10$S/HjSwqh8QIjc

Otro problema es que no puedo codificar el valor directamente en una variable. Contiene múltiples $ y los interpreta como otra variable dentro de un string. ¿Qué debo hacer al respecto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar el problema de que varios $ sean vistos como variables dentro de una cadena, puedes envolver los datos en un hash entre comillas o utilizar la función addslashes() para escapar los caracteres especiales. Por ejemplo:

    $hashed_password = '$2y$10$S/HjSwqh8QIjc';
    $query=mysqli_query($conn,"SELECT * FROM students WHERE password='$hashed_password' limit 1");
    

    Alternativamente, puedes utilizar declaraciones preparadas para enlazar los parámetros a la consulta, lo cual elimina la necesidad de escapar los caracteres especiales:

    $stmt = $conn->prepare("SELECT * FROM students WHERE password=? limit 1");
    $stmt->bind_param("s", $hashed_password);
    $stmt->execute();
    $result = $stmt->get_result();
    $data = $result->fetch_assoc();
    

    De esta manera, el valor de la contraseña en formato hash nunca se incluye directamente en la cadena de consulta, evitando cualquier problema con caracteres especiales o ataques de inyección SQL.

Comments are closed.