-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:解决了在第一次比较中添加另一个子句。
注意:这段代码容易受到** SQL注入** - 试想像apodo的值就像''; DROP TABLE kiroldb_v2.Usuario; --'。使用**参数化语句**还有:*每当你存储一个非哈希密码时,root将一个小猫移动到/ dev/null * - 存储明文密码是你可以对用户做的最糟糕的事情之一!使用'password_hash()'和'password_verify()' –
添加一个附加子句 –
顺便说一句,不要在现场环境中使用它,你会被黑客攻击。除非你是一个负责处罚的人。 –