Estoy creando un sitio web simple y burlón que demuestra la inyección de SQL. Se parece a esto:
Elback-endestáescritoenPHP.
<?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;
}
?>
Para esta siguiente línea de código:
$raw_results = mysqli_query($con, "SELECT * FROM tools
WHERE ('name' LIKE '%$query%')");
Si modifico el código en:
$raw_results = mysqli_query($con, "SELECT * FROM tools
WHERE ('name' LIKE '%')");//$query%')");
Mientras proporcione una cadena que sea más larga o igual a tres caracteres, se mostrará la base de datos completa, lo que significa que ')");//
es un ataque de inyección de SQL válido.
Pero cuando proporciono ')");//
como entrada maliciosa en el cuadro de búsqueda, recibí este mensaje de advertencia:
error en la consulta, no hay resultados disponibles. Tienes un error en tu sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de ""); //% ')' en la línea N
No estoy seguro de por qué mi inyección SQL no podría recuperar ningún dato.