Hola, tengo un problema estoy desarrollando una tienda virtual, pero se manejara mucha informacion no solo de productos si no tambien de facturas, contabilidad, estados de cuentas etc...
El problema es que he debugeado y he encontrado SQL Inyeccion.
Explico mi codigo de manera muy simple:
Catalogo.php
<?PHP
include("includes/conx.php");
$query="SELECT * FROM PRODUCTOS";
echo"<img src='"; echo"".$row["imagen"]."";echo"'>";
echo"nombre: ".$row["nombre"]."<br>";
echo"marca: ".$row["marca"]."<br>";
echo"modelo: ".$row["modelo"]."<br>";
echo"descripcion: ".$row["descripcion"]."<br>";
echo"precio: ".$row["precio"]."<br>";
echo"<a href='carrito.php?id="; echo"".$row["id"]."";echo"'>Comprar</a>";
echo"<br>";
}
?>
Aqui tenemos un catalogo con una lista de productos la cual para poder comprar he añadido un enlace apuntando a carito.php el ual recibe como argumento el id del producto mediante GETS.
Carrito.php<?PHP
$producto=$_GET["id"];
include("includes/conx.php");
$query="SELECT * FROM PRODUCTOS WHERE id=$producto";
echo"Usted pidio: ".$row["nombre"]."<br>";
echo"De la marca. ".$row["marca"]."<br>";
echo"El cual cuesta:".$row["precio"]."<br>";
}
//$error=mysql_error();
//echo$error;
?>
Comno se ve carrito.php recibe el id y lo almacena en la variable producto, despues seleccionamos todos los campos correspondientes a dicho id de producto y lo mostramos los detalles de la compra.
La tabla en la que almaceno los datos tiene 9 campos, entonces la url queda asi:
htt://localhost/shop/carrito.php?id=1Para inyectar SQL lo hago:
http://localhost/shop/carrito.php?id=1 UNION SELECT 1,TABLE_NAME,3,4,5,6,7,8,9 FROM information_schema.TABLES LIMIT 1,1 --
Ya con esto obtengo el nombre de las tables que se guardan en SHCHEMA y bueno ya seria cuestion de ir aumentando el limit y pokito de intelecto para lograr obtener todos los nombres de las tablas y asu ves poder ver los registros de cada tabla etc...
Quisiera saber como puedo evitar este tipo de ataques, pense en ingeniarmelas para mandar el id mediante POST y asignar permisos al usuario de la base de datos para que no pueda acceder a dichas tablas pero si en su caso yo entrego esta aplicacion a alguna empresa, ellos no se van a poner a crear permisos de usuarios y todo eso, lo normal es que ellos instalen la tienda con el usuario que tienen en la base de datos y listo.
Ustedes que me recomiendan? Agradecere sus comentarios y sugerencias.
Gracias y un saludo