Sto cercando di conoscere le Iniezioni SQL. Ho creato un modulo di accesso usando PHP (sono abbastanza nuovo per PHP) come linguaggio di scripting backend e MySQL come DBMS. L'ultimo giorno ho fatto una domanda sulle iniezioni SQL: SQL Injection non funziona quando penso che dovrebbe , e mi ha risolto alcuni dubbi, ma ora ho dei dubbi nuovi:
Quello che sto cercando di ottenere è di bypassare il modulo di accesso che ho creato, utilizzando le Iniezioni SQL. Questo è lo script per verificare se il nome utente e la password immessi appartengono a un utente già registrato (memorizzato nel DB).
$email = $_POST['u_email'];
$password = $_POST['u_password'];
$query = "SELECT * FROM User WHERE EMAIL='$email' AND PASSWORD='$password'";
$result = $mysqli->query($query);
$counter = mysqli_num_rows($result);
echo "Counter: " . $counter . '<br>';
echo "Query: " . $query;
if($counter == 1)//Correct Login
Devo dire che sono davvero confuso riguardo al risultato ottenuto durante l'esecuzione delle query. Ho creato i seguenti 3 esempi in cui in ognuno di essi inserisco diversi valori di nome utente e password nel login forma e il vero è che non capisco il risultato ottenuto da nessuno degli esempi, penso che i risultati dovrebbero essere diversi.
1 Esempio: ([email protected] è un'e-mail esistente nella tabella Utente)
Input
Username: [email protected]' OR '1'='1/*
Password: */
Output
Counter: 1
Query: SELECT * FROM User WHERE EMAIL='[email protected]' OR '1'='1/*' AND PASSWORD='*/'
Il valore della variabile contatore $ non dovrebbe essere 30 (30 è il numero di utenti registrati nella tabella User)?
Quando eseguo la seguente query nella CLI MySQL:
SELECT * FROM User WHERE EMAIL='[email protected]' OR '1'='1'
Ottengo 30 righe, quindi perché il valore del contatore $ è 1 e non 30?
2 Esempio: (xxx NON è un'e-mail esistente nella tabella Utente)
Input
Username: xxx' OR '1'='1/*
Password: */
Output
Counter: 0
Query: SELECT * FROM User WHERE EMAIL='xxx' OR '1'='1/*' AND PASSWORD='*/'
Il valore della variabile contatore $ non dovrebbe essere 30 (30 è il numero di utenti registrati nella tabella User)?
Quando eseguo la seguente query nella CLI MySQL:
SELECT * FROM User WHERE EMAIL='xxx' OR '1'='1'
Ottengo 30 righe, quindi perché il valore del contatore $ è 0 e non 30?
3 Esempio: ([email protected] è un'e-mail esistente nella tabella Utente)
Input
Username: [email protected]/*
Password: */
Output
Counter: 0
Query: SELECT * FROM User WHERE EMAIL='[email protected]/*' AND PASSWORD='*/'
Il valore della variabile contatore $ non dovrebbe essere 1?
Quando eseguo la seguente query nella CLI MySQL:
SELECT * FROM User WHERE EMAIL='xxx' OR '1'='1'
Ottengo 1 riga, quindi perché il valore del contatore $ è 0 e non 1?