-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()' –
添加一個附加子句 –
順便說一句,不要在現場環境中使用它,你會被黑客攻擊。除非你是一個負責處罰的人。 –