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 originalINSERT INTO `publicaciones` VALUES(
'',
\"" .mysql_real_escape_string($idCiudad). "\",
$idComuna,
\"" .mysql_real_escape_string($idCategoria). "\",
\"" .mysql_real_escape_string($idSubcategoria). "\",
\"" .mysql_real_escape_string($nombre). "\",
\"" .mysql_real_escape_string($email). "\",
\"" .mysql_real_escape_string($telefono). "\",
\"" .mysql_real_escape_string($titulo). "\",
\"" .mysql_real_escape_string($contenido). "\",
\"" .mysql_real_escape_string($precio). "\",
\"" .mysql_real_escape_string($tipo). "\",
\"" .mysql_real_escape_string($tiempo). "\",
\"" .mysql_real_escape_string($imagen). "\",
\"" .mysql_real_escape_string($random). "\"
)";
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 originalif(isset($_SESSION['Random']) == isset($_POST['math']) && isset($_POST['idCiudad']) && isset($_POST['idCategoria'])){
$idCiudad = $_POST['idCiudad'];
$idComuna = $_POST['idComuna'];
$idCategoria = $_POST['idCategoria'];
$idSubcategoria = $_POST['idSubcategoria'];
$telefono = $_POST['telefono'];
$contenido = $_POST['contenido'];
$precio = $_POST['precio'];
$tipo = $_POST['tipo'];
$random = rand(123456789,987654321); $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!!