Ho creato un sito di test per conoscere SQLi e quindi proteggerlo. Potrei essere frainteso su come dovrebbe comportarsi, ma al momento non sto ottenendo i risultati che mi aspetto.
La pagina:
<!DOCTYPE html>
<html><body>
<h1>SQL Injection Test Site</h1>
<h2>Login Form</h2>
<form action="" method="post">
Username: <input type="text" name="username">
Password: <input type="text" name="password">
<input type="submit"></form>
<?php
$db = mysql_connect(***, ***, ***);
if(!$db){
die('Could not connect: ' . mysql_error());
}else{
mysql_select_db(***);
}
if(isset($_POST["username"]) && isset($_POST["password"])){
$username = $_POST["username"];
$password = $_POST["password"];
$result = mysql_query("SELECT * FROM customer_data
WHERE username = '$username'
AND password = '$password'");
$result = mysql_fetch_assoc($result);
//we would now process the login if details matched
echo "Logged in: " . $result['username'];
var_dump($result);
}
?>
</body></html>
La tabella nel database:
L'input:
username: admin
password: ' OR '1'='1
La mia aspettativa è che troverà l'utente amministratore e quindi accetterà l'input dal campo password come '1' = '1 dovrebbe valutare su true. In realtà restituisce il risultato per la prima voce nella tabella, nome utente JBloggs. Questo è il bit che non capisco.
Qualcuno può segnalare un errore nel codice o nella logica che sta causando questo comportamento?