Foros del Web » Programando para Internet » PHP »

Problema con SQL inyeccion

Estas en el tema de Problema con SQL inyeccion en el foro de PHP en Foros del Web. Hola a todos: Por favor agradezco la ayuda de toda la comunidad y todas las personas que sepan sobre el tema. Tengo un problema con ...
  #1 (permalink)  
Antiguo 19/01/2009, 17:36
 
Fecha de Ingreso: febrero-2007
Mensajes: 62
Antigüedad: 17 años, 2 meses
Puntos: 0
Problema con SQL inyeccion

Hola a todos:
Por favor agradezco la ayuda de toda la comunidad y todas las personas que sepan sobre el tema.
Tengo un problema con una de mis consultas MySQL en una pagina PHP, tenemos que cumplir con el estandar PCI. Y la entidad la cual hace el scan de la pagina nos dice que ahi riesgo de SQL inyeccion en dicha pagina.
he investigado acerca del tema y ya hise dos correcciones con el mysql_escape_string. Pero ninguna me ha funcionado y al hacer el scan de la pagina vuelve y sale la vulnerabilidad con esta pagina especificamente.
Les muestro el codigo:
<?php $_GET["IDvar"];
function cleanQuery($string)
{
if(get_magic_quotes_gpc()) // prevents duplicate backslashes
{
$string = stripslashes($string);
}
if (phpversion() >= '4.3.0')
{
$string = mysql_real_escape_string($string);
}
else
{
$string = mysql_escape_string($string);
}
return $string;
}

// if you are using form data, use the function like this:
if (isset($_GET["IDvar"])) $itemIDv = cleanQuery($_GET["IDvar"] && isset($_SESSION["IDSe"])) $itemSe = cleanQuery($_SESSION["IDSe"]);
// you can also filter the data as part of your query:
$DeleteV = mysql_query("DELETE FROM registros WHERE IDVAR = '". cleanQuery($itemIDv)."' AND sesionvar = '". cleanQuery($itemSe)."' "; ?>

Esta mañana fui a hacer una prueba en la pagina y me arrojo error, lo voy a examinar a ver que paso. Pero mi problema en si esta es por el SQL inyeccion y que me han rechazado ya 2 veces.
GRACIAS Y EXITOS
  #2 (permalink)  
Antiguo 19/01/2009, 17:49
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Problema con SQL inyeccion

A nivel de base de datoste puedo sugerir lo siguiente
- Usar procedimientos almacenados para realiza consultas sensibles, ejemplo validación de contraseñas
- Prepared Statements para tus consultas http://dev.mysql.com/tech-resources/...tatements.html
- Al usuario de base de datos que usa la web debe tener solo los permisos necesarios, ejemplo: si solo consulta información, pues el usuario que se conecta a la DB debe tener permisos para hacer solo selects.

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 19/01/2009, 20:25
Avatar de Madian  
Fecha de Ingreso: mayo-2008
Ubicación: Villahermosa Tabasco
Mensajes: 13
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Problema con SQL inyeccion

Hola, mira prubea esta funcion espero te sirva
function addslashes__recursive($var){
if (!is_array($var))
return addslashes($var);
$new_var = array();
foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
return $new_var;
}
$_POST=addslashes__recursive($_POST);
$_GET=addslashes__recursive($_GET);
$_REQUEST=addslashes__recursive($_REQUEST);
$_SERVER=addslashes__recursive($_SERVER);
$_COOKIE=addslashes__recursive($_COOKIE);
$_COOKIE=addslashes__recursive($_SESSION);

y trata de utilizar alguna libreria de apoyo para hacer tu aplicacion mas robusta, nose puedes probar mysqli
$mysqli = new mysqli("servidor", "usuario_db", "password","base_datos");
/* Verificamos conexion */
if (mysqli_connect_errno()) {
printf("La conexion fallo: %s\n", mysqli_connect_error());
exit();
}
$mysqli-> query("DELETE FROM registros WHERE IDVAR = '$itemIDv' AND sesionvar = '$itemSe");

o dale un vistaso a esta libreria de perl
http://pear.php.net/package/MDB2
  #4 (permalink)  
Antiguo 19/01/2009, 21:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con SQL inyeccion

Tema trasladado a PHP.

http://www.forosdelweb.com/f21/funci...-datos-413499/
  #5 (permalink)  
Antiguo 21/01/2009, 11:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 62
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Problema con SQL inyeccion

Hola Genetix y Madian:
Gracias por las respuestas, voy atener en cuenta ello y ponerlo en practica, por que aun estoy en el dilema de si me funciono o no, ayer precisamente y gracias a un muy buen forero de aca. Don patron, al cual el agradezco mucho.
Estuvimos mirando el codigo de la pagina y analizandolo.
el codigo expuesto al principio mi post lo dejamos tal cual y lo unico que se agrego fue que como se reciben numeros enteros por GET, se agrego esta linea:
$NuevaVar = (int)$_GET['MyVar'];
Esta lo que hace hasta donde entendi, es que verifica y es true si los datos son numeros enteros. Hicimos con don patron las pruebas con letras y caracteres especiales y fue muy interesante ver que los termina convirtiendo en 0 (cero) en caso de que sean letras o caracteres especiales, con lo cual se condicona mas la consulta para la BD si no existe en ella un dato con el numero 0.
Y bueno, desde la pagina donde se envian los datos se programo para que efectue una consulta y basado en la informacion que suministra la consulta se condiciona con un if para que muestre o no el formulario, este es un pequeno pedazo inicial para evitar el sql injection (creo yo) basado en loq ue he leido e investigado. Mas o menos esta prevencion con el fi se podria decir que es como un manejo de posibles errores y la idea que uno se antepondria a ellos.
al igual se implementa el uso de expresiones regulares, condicionales if y el uso del mysql_real_escape_string, tal cual al funcion del inicio del post.
Estoy efectuando scan de la pagina, pienso usar varios programas para corroborar los datos y la informacion y si la cosa funciona bien y tras los bombardeos de los programas no muestra riesgo de sql injection, entonces les estare avisando aca y explicando mas detalladamente la iomplementacion para todas a quellas personas que puedan tenr el mismo problema que yo.
Espero que funcione y se lo pido al todo poderoso de arriba.
  #6 (permalink)  
Antiguo 22/01/2009, 07:31
 
Fecha de Ingreso: diciembre-2008
Mensajes: 39
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Problema con SQL inyeccion

usa pura y exclusivamente mysql_real_escape_string. para toda variable que vaya a una consulta sql. o en su defecto mysql_escape_string ( que es equivalente a real_escape_string desde php5.0 )
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:33.