• Domingo 17 de Noviembre de 2024, 20:37

Autor Tema:  SQL INYECTION en mi Shop  (Leído 1850 veces)

th3r0rn

  • Miembro activo
  • **
  • Mensajes: 49
  • Nacionalidad: mx
    • Ver Perfil
    • http://imgeek.net
SQL INYECTION en mi Shop
« en: Martes 8 de Diciembre de 2009, 21:18 »
0
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
Código: PHP
  1. <?PHP
  2. include("includes/conx.php");
  3.  
  4. $query="SELECT * FROM PRODUCTOS";
  5.  
  6. $regs=mysql_query($query,$conx);
  7.  
  8. while($row=mysql_fetch_array($regs)){
  9.     echo"<img src='";   echo"".$row["imagen"]."";echo"'>";
  10.     echo"nombre: ".$row["nombre"]."<br>";
  11.     echo"marca: ".$row["marca"]."<br>";
  12.     echo"modelo: ".$row["modelo"]."<br>";
  13.     echo"descripcion: ".$row["descripcion"]."<br>";
  14.     echo"precio: ".$row["precio"]."<br>";
  15.    echo"<a href='carrito.php?id=";   echo"".$row["id"]."";echo"'>Comprar</a>";
  16.  
  17.     echo"<br>";
  18.  
  19.  
  20. }
  21.  
  22. ?>
  23.  
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
Código: PHP
  1. <?PHP
  2. $producto=$_GET["id"];
  3. include("includes/conx.php");
  4.  
  5. $query="SELECT * FROM PRODUCTOS WHERE id=$producto";
  6. $pedido=mysql_query($query,$conx);
  7.  
  8. while($row=mysql_fetch_array($pedido)){
  9.     echo"Usted pidio: ".$row["nombre"]."<br>";
  10.     echo"De la marca. ".$row["marca"]."<br>";
  11.     echo"El cual cuesta:".$row["precio"]."<br>";
  12.  
  13. }
  14. //$error=mysql_error();
  15. //echo$error;
  16. ?>
  17.  
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=1
Para inyectar SQL lo hago:
Código: SQL
  1. 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 --
  2.  
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

angelbroz

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
    • http://www.angelbroz.com
Re: SQL INYECTION en mi Shop
« Respuesta #1 en: Martes 8 de Diciembre de 2009, 22:14 »
0
Que hay th3r0rn =)

Siempre que hagas consultas SQL utilizando variables que obtienes con GET, POST y hasta las variables de las COOKIES,  tienes que pasarlas por filtros para evitar inyecciones SQL
PHP tiene funciones para eso...

Código: PHP
  1. $mivariable = mysql_real_escape_string($mivariable);
  2.  

aplicando esta funcion a tu codigo, quedaria de esta forma...


Código: PHP
  1.  
  2.     <?PHP
  3.    
  4.     include("includes/conx.php");
  5.  
  6.     $producto = mysql_real_escape_string($_GET["id"]);
  7.  
  8.     $query="SELECT * FROM PRODUCTOS WHERE id=$producto";
  9.     $pedido=mysql_query($query,$conx);
  10.      
  11.     while($row=mysql_fetch_array($pedido)){
  12.        echo"Usted pidio: ".$row["nombre"]."<br>";
  13.        echo"De la marca. ".$row["marca"]."<br>";
  14.        echo"El cual cuesta:".$row["precio"]."<br>";
  15.    
  16.    }
  17.    //$error=mysql_error();
  18.    //echo$error;
  19.    ?>
  20.  
  21.  

th3r0rn

  • Miembro activo
  • **
  • Mensajes: 49
  • Nacionalidad: mx
    • Ver Perfil
    • http://imgeek.net
Re: SQL INYECTION en mi Shop
« Respuesta #2 en: Miércoles 9 de Diciembre de 2009, 02:20 »
0
q onda angel, yap si puse y ya quedo =D
Saludos