Foros del Web » Programando para Internet » PHP »

mi web tiene sql injetion , como lo arreglo?

Estas en el tema de mi web tiene sql injetion , como lo arreglo? en el foro de PHP en Foros del Web. Hola mi web tiene sql injetion,, esta codeada todo pormi . pero no se como arreglar el sql injetion .. .. aki les dejo los ...
  #1 (permalink)  
Antiguo 04/05/2008, 18:32
Avatar de duskrow  
Fecha de Ingreso: abril-2008
Mensajes: 267
Antigüedad: 16 años
Puntos: 8
mi web tiene sql injetion , como lo arreglo?


Hola mi web tiene sql injetion,, esta codeada todo pormi . pero no se como arreglar el sql injetion .. .. aki les dejo los archijvos k use. ojala alguien me pueda aiudar

los archivos estan en

http://rapidshare.com/files/112602894/sql_injetion.rar.html

ojala me puedan aiudar
  #2 (permalink)  
Antiguo 04/05/2008, 18:50
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: mi web tiene sql injetion , como lo arreglo?

Hola, revisa por aca http://quarkblog.org/2005/06/09/evit...ection-en-php/

te recomiendo que arregles la forma en que escribes tus mensajes, para una buena comprension
__________________
Nuevamente a las pistas ...
  #3 (permalink)  
Antiguo 04/05/2008, 18:53
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: mi web tiene sql injetion , como lo arreglo?

intenta usando esta funcion con los datos enviados por form

Código PHP:
function mysql_escape($cadena) {
    if(
get_magic_quotes_gpc() != 0) {
        
$cadena stripslashes($cadena);
    }
    return 
mysql_real_escape_string($cadena);

pero es extraño, por que al final es lo mismo, usando stripslashes, pero prueba, yo lo tengopuesto y no tengo sql injection



Un saludo
  #4 (permalink)  
Antiguo 04/05/2008, 19:43
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
De acuerdo Re: mi web tiene sql injetion , como lo arreglo?

Usar solo stripslashes() y strip_tags() no es nada seguro....

strip_tags() :
Debe tenerse en cuenta que la funció no modifica los atributos de las etiquetas que se permiten mediante el parámetro etiquetas_permitidas , por lo que un usuario con malas intenciones podrí incluir atributos como style y onmouseover cuando envía información a sitios como un foro de discusión.

stripslashes() :
Lo unico que hace es: Devuelve una cadena con las barras invertidas eliminadas (\' se convierte en ', etc.). Las barras invertidas dobles (\\) se convierten en sencillas (\).
te va a proteger contra inyeccionnes de este tipo ( pagina.php?id=-1' or 1=1 -- ) pero no contra una inyeccion mejor elaborada como esta: ( pagina.php?id==-1/**/UNION/**/ALL/**/SELECT/**/1,2,concat(user,0x3a,pass),null,5,6/**/FROM/**/usuarios/* ) que si te fijas no usa comillas...


MEJOR Usa esta funcion para todas las variables: $_GET $_POST $_SESSION $_COOKIE etc... todas las variables externas.. y listo!


Código PHP:

if (!function_exists("GetSQLValueString")) {
function 
GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  
$theValue function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}


por ejemplo:

en ves de hacer tu consulta asi:
Código PHP:
// consulta vulnerable a inyeccion sql
$uidpers=$_GET['uid'];
mysql_select_db($database_conexion$conexion);
$query_uidpers "select * from usuarios WHERE Idusuario='".$uidpers."'  ";
$uidpers mysql_query($query_uidpers$conexion) or die(mysql_error());
$row_uidpers mysql_fetch_assoc($uidpers);
$totalRows_uidpers mysql_num_rows($uidpers); 

hacela asi:
Código PHP:
// consulta NO vulnerable a inyeccion sql
$uidpers=GetSQLValueString($_GET['uid'], "int");
mysql_select_db($database_conexion$conexion);
$query_uidpers "select * from usuarios WHERE Idusuario='".$uidpers."'  ";
$uidpers mysql_query($query_uidpers$conexion) or die(mysql_error());
$row_uidpers mysql_fetch_assoc($uidpers);
$totalRows_uidpers mysql_num_rows($uidpers); 
como te harian la inyeccion sql?

asi:
Código HTML:
www.tupagina.com/pagina.php?uid=-1/**/UNION/**/ALL/**/SELECT/**/1,2,concat(user,0x3a,pass),null,5,6/**/FROM/**/usuarios/*

Última edición por farra; 04/05/2008 a las 19:57
  #5 (permalink)  
Antiguo 04/05/2008, 19:50
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: mi web tiene sql injetion , como lo arreglo?

hola de nuevo



farra, creo que "GetSQLValueString" no es una funcion de php y no limpiaria las variables, creo, que es una funcion que hace dreamwever no?

creo que mejor la funcion que postee antes es suficiente, me la paso okram y yo no tengo sql injection

Bueno, perdon , ahora veo que incluyes la funcion, en tal caso es la misma, aplica en definitiva mysql_real_scape_sting, y eso es de lo que se trata
  #6 (permalink)  
Antiguo 04/05/2008, 20:05
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
Re: mi web tiene sql injetion , como lo arreglo?

Cita:
Iniciado por jaronu Ver Mensaje
hola de nuevo



farra, creo que "GetSQLValueString" no es una funcion de php y no limpiaria las variables, creo, que es una funcion que hace dreamwever no?

creo que mejor la funcion que postee antes es suficiente, me la paso okram y yo no tengo sql injection

Bueno, perdon , ahora veo que incluyes la funcion, en tal caso es la misma, aplica en definitiva mysql_real_scape_sting, y eso es de lo que se trata
sip es una funcion para PHP y si dreamweaver genera esa funcion... es una funcion que limpia las variables ya que usa las mismas funciones que vos con otro agregados y la he testeado personalmente.... proteje 100% contra inyecciones sql a diferencia del codigo que usas que solo proteje contra algunos tipos de inyecciones....

y si le agregas htmlentities al imprimir tus variables ahi protejes tambien contra ataques XSS....

que hace la funcion?

utiliza funciones de php como:

get_magic_quotes_gpc()
stripslashes()
mysql_real_escape_string()

para limpiar las variables y luego valida el tipo de dato, si es el tipo que le indicas devuelve la variable limpia... caso contrario devuelve nulo...
  #7 (permalink)  
Antiguo 05/05/2008, 00:51
Avatar de duskrow  
Fecha de Ingreso: abril-2008
Mensajes: 267
Antigüedad: 16 años
Puntos: 8
Re: mi web tiene sql injetion , como lo arreglo?

bueno dejame probar y espero me funcione muchas gracias muchachos :)
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:55.