Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/03/2011, 11:49
ZeThito
 
Fecha de Ingreso: septiembre-2010
Mensajes: 147
Antigüedad: 13 años, 7 meses
Puntos: 3
Problema con Inyección SQL!

Tengo una página la cual hace publicaciones de anuncios, bueno y ayer con un programa para buscar vulnerabilidades (acunetix) encontré que tenia esta grave vulnerabilidad, la cual puedo publicar a través del mismo programa muchos registros (anuncios).

Bueno desde entonces empecé a buscar formas de corregir este problema y encontré una función que debía aplicar en todas mis sentencias SQL cuando envió parámetros.

Entonces aplique esta función:

Código SQL:
Ver original
  1. INSERT INTO `publicaciones` VALUES(
  2.                                                                                     '',
  3.                                                                                     \"" .mysql_real_escape_string($idCiudad). "\",
  4.                                                                                     $idComuna,
  5.                                                                                     \"" .mysql_real_escape_string($idCategoria). "\",
  6.                                                                                     \"" .mysql_real_escape_string($idSubcategoria). "\",
  7.                                                                                     \"" .mysql_real_escape_string($nombre). "\",
  8.                                                                                     \"" .mysql_real_escape_string($email). "\",
  9.                                                                                     \"" .mysql_real_escape_string($telefono). "\",
  10.                                                                                     \"" .mysql_real_escape_string($titulo). "\",
  11.                                                                                     \"" .mysql_real_escape_string($contenido). "\",
  12.                                                                                     \"" .mysql_real_escape_string($precio). "\",
  13.                                                                                     \"" .mysql_real_escape_string($tipo). "\",
  14.                                                                                     \"" .mysql_real_escape_string($tiempo). "\",
  15.                                                                                     \"" .mysql_real_escape_string($imagen). "\",
  16.                                                                                     \"" .mysql_real_escape_string($random). "\"
  17.                                                                                 )";

Bueno está función no me arroja error y registra normalmente mi anuncio.

Luego volví al programita (acunetix) y aplique Start... Y bueno volvieron aparecer las vulnerabilidades Inyection SQL, y sucedió lo mismo, "puedo hacer inyecciones sql masiva e insertar miles de publicaciones.

No sé cómo puedo arreglar esto, ya que he aplicado lo que encontré sobre los escapes en las comillas, pero no paso nada. =/


Dejo mí un trozo de mi código donde valida un poco, ya que de todas formas en la página donde tengo el formulario valida todos los campos con jquery y además tiene un captcha, aún así se puede hacer estas inyecciones vía POST.

Código PHP:
Ver original
  1. if(isset($_SESSION['Random']) == isset($_POST['math']) && isset($_POST['idCiudad']) && isset($_POST['idCategoria'])){
  2.  
  3.     $idCiudad                           = $_POST['idCiudad'];
  4.     $idComuna                           = $_POST['idComuna'];
  5.     $idCategoria                        = $_POST['idCategoria'];
  6.     $idSubcategoria                     = $_POST['idSubcategoria'];
  7.        
  8.     $nombre                             = strip_tags(str_replace(array( '@', '¬', '/', '&', '%' ), '',$_POST['nombre']));
  9.     $email                              = strtolower(strip_tags($_POST['email']));
  10.     $telefono                           = $_POST['telefono'];
  11.     $titulo                             = strip_tags(str_replace(array( '@', '¬', '/', '&', '%' ), '',$_POST['titulo']));
  12.     $contenido                          = $_POST['contenido'];
  13.     $precio                             = $_POST['precio'];
  14.     $tipo                               = $_POST['tipo'];
  15.     $tiempo                             = date("Y-m-d H:i:s",time());
  16.     $random                             = rand(123456789,987654321);
  17.     $archivo                            = $_FILES['file']['tmp_name'];


Una Foto del programa, donde marco el boton Start y me realiza las miles de Inyecciones SQL a mi Base de datos...



Espero que alguién sepa como corregir esto y me ayuda, saludos!!