2017-01-31 42 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

請考慮批准我的答案,如果它幫助你。謝謝。 –

相關問題