2017-01-31 44 views
-3

我有下一个PHP代码,验证用户是否存在,密码是好的。问题是当用户不存在时,如果你没有传递任何密码,代码将返回“true”。为什么这个php代码返回“true”?

$apodo= $_GET['apodo']; //Login por mail 
$userPass= $_GET['clave']; 
//Iniciamos la solicitud de información 
$server = "localhost"; 
$conn = mysqli_connect($server, "root", "", "_v2"); 
if (!$conn) { 
    echo "Error: No se pudo conectar a MySQL." . PHP_EOL; 
    echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL; 
    echo "error de depuración: " . mysqli_connect_error() . PHP_EOL; 
    exit; 
} 
$query = "SELECT * FROM kiroldb_v2.Usuario WHERE apodo='$apodo'"; 
$result = mysqli_query($conn, $query); 
$usuario = mysqli_fetch_array($result); 
    if(strcmp($userPass,$usuario['clave'])==0){ 
    echo "true"; 
    }else{ 
      echo "false"; 
    } 
?> 

问题在哪里?

编辑1:解决了在第一次比较中添加另一个子句。

+3

注意:这段代码容易受到** SQL注入** - 试想像apodo的值就像''; DROP TABLE kiroldb_v2.Usuario; --'。使用**参数化语句**还有:*每当你存储一个非哈希密码时,root将一个小猫移动到/ dev/null * - 存储明文密码是你可以对用户做的最糟糕的事情之一!使用'password_hash()'和'password_verify()' –

+0

添加一个附加子句 –

+0

顺便说一句,不要在现场环境中使用它,你会被黑客攻击。除非你是一个负责处罚的人。 –

回答

1
if(strcmp($userPass,$usuario['clave'])==0){ 

万一用户不存在,没有密码已输入:

$为userpass等于 “”

$ usuario [ '个儿']等于null或 “” 作为好。

所以比较条件返回true。

为了克服它,你需要添加另一个条件来确保用户存在。

if(strcmp($userPass,$usuario['clave'])==0 && $usario['id'] > 0){ 

一个更好的想法是添加在SQL查询密码进行比较,并检查是否这样的用户存在。

+0

请考虑批准我的答案,如果它帮助你。谢谢。 –

相关问题