Sto creando un semplice sito Web di simulazione che dimostra l'iniezione SQL. Sembra così:
Ilback-endèscrittoinPHP.
<?php$query=$_GET['query'];$min_length=3;if(strlen($query)>=$min_length){$raw_results=mysqli_query($con,"SELECT * FROM tools
WHERE ('name' LIKE '%$query%')");
if($raw_results === FALSE) {
echo "query failed, no results available." . mysqli_error($con);
die();
}
if(mysqli_num_rows($raw_results) > 0){ // if one or more rows are returned do following
while($results = mysqli_fetch_array($raw_results)){
echo "<p><h3>".$results['name']."</h3>".$results['price']."</p>";
}
}
else{ // if there is no matching rows do following
echo "No results";
}
}
else{ // if query length is less than minimum
echo "Minimum length is ".$min_length;
}
?>
Per questa seguente riga di codice:
$raw_results = mysqli_query($con, "SELECT * FROM tools
WHERE ('name' LIKE '%$query%')");
Se modifico il codice in:
$raw_results = mysqli_query($con, "SELECT * FROM tools
WHERE ('name' LIKE '%')");//$query%')");
Se fornisco una stringa che è più lunga o uguale a tre caratteri, verrà visualizzata l'intera base di dati, il che significa che ')");//
è un attacco di iniezione SQL valido.
Ma quando fornisco ')");//
come input malizioso nella casella di ricerca, ho ricevuto questo messaggio di avviso:
query failed, no results available.You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '");//%')' at line N
Non sono sicuro del motivo per cui la mia iniezione SQL non è riuscita a recuperare alcun dato.