Foros del Web » Programando para Internet » PHP »

2 Funciones Anti SQL Injection - Cual es mejor para uds. ?

Estas en el tema de 2 Funciones Anti SQL Injection - Cual es mejor para uds. ? en el foro de PHP en Foros del Web. hoal gente, buscando encontre estas dos funciones para trabajar variables y mediante las cuales no se pueda hacer sql injection (tanto para post como para ...
  #1 (permalink)  
Antiguo 22/04/2009, 15:58
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 4 meses
Puntos: 6
De acuerdo 2 Funciones Anti SQL Injection - Cual es mejor para uds. ?

hoal gente, buscando encontre estas dos funciones para trabajar variables y mediante las cuales no se pueda hacer sql injection (tanto para post como para get)

aca dejo cada funcion y me gustaria que opinen respecto a cual es la mejro para Uds.


Funcion Nro 1 [posteada por Znet]

Código PHP:
function clean_bad_chars($char)
{
$ban=0;//Bandera para saber si estan ejecutando una Inyeccion SQL
$char_w_replaced stripslashes($char);//Guardamos la Inyeccion original para informacion a la BD
//Array con las palabras reservadas, para modificar a gusto :D
$hack_array = array("'"'"'";""UNION""union""DROP""drop""table""TABLE""SET""set""UPDATE""update""SELECT""select""-""--""MEMB_INFO""memb_info""memb__pwd""memb___id"); //Caracter por el que será reemplazada cada palabra reservada del sitio
$hack_replace ""//Separamos la cadena en un Array para poder hacer la comparacion y determinar si estan
//ejecutando o no una Inyeccion SQL
$char1=explode(" ",$char);
for(
$i=0;$i<count($char1);$i++)
{
 if(
in_array($char1[$i],$hack_array))//si se quiere se puede convertir todo a mayusculas para la comprobacion.
 
{
  
$ban=1;
 } 
}
 if (
$ban==1)
 {
  
$add="ESTAS HACKEANDO SI SI"
  
//guardar informacion en base de datos sobre el intento de hacking como IP, etc...
 
}
 else 
 {
  
$add="NO ESTAS HACKEANDO"
  
//seguir con los procesos del POST o GET sin guardar ips ni nada
 
}  
//reemplazamos las palabras reservadas
$char_replaced str_replace($hack_array$hack_replace$char);
//evitamos codigos html y espacios en blanco
$char_clean=htmlentities(trim($char_replaced)); //retornamos la cadena limpia para usar en nuestra consulta, o podemos devolver segun el resultado de ban
//un die para no ejecutar nada o como se les ocurra
 
return $char_clean.$add;

Funcion Nro 2 [Posteada por farra]

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;
}

uso de funcion 2

Código PHP:
$variable=GetSQLValueString($_GET['Id'],"int"); 
Salu2 y espero sirva esta discucion.
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #2 (permalink)  
Antiguo 22/04/2009, 16:00
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: 2 Funciones Anti SQL Injection - Cual es mejor para uds. ?

En la mayoría de los casos (si hablamos de MySQL), basta con mysql_real_escape_string() si es un campo texto, y convertir a entero si es un valor numérico (que según parece, es lo que hace la segunda función).
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 22/04/2009, 16:02
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: 2 Funciones Anti SQL Injection - Cual es mejor para uds. ?

Cita:
Iniciado por David el Grande Ver Mensaje
En la mayoría de los casos (si hablamos de MySQL), basta con mysql_real_escape_string() si es un campo texto, y convertir a entero si es un valor numérico.
en el caso de que tengo la url de mi web index.php?menu=5

como lo harias ? porque no se como pero me borraron todo :S
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
  #4 (permalink)  
Antiguo 22/04/2009, 16:05
f0n
 
Fecha de Ingreso: abril-2009
Mensajes: 54
Antigüedad: 15 años
Puntos: 1
Respuesta: 2 Funciones Anti SQL Injection - Cual es mejor para uds. ?

$id = (int)$_GET['id']

si no me equivoco eso haría el casting a entero de la variable id
  #5 (permalink)  
Antiguo 22/04/2009, 16:07
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: 2 Funciones Anti SQL Injection - Cual es mejor para uds. ?

Usa intval() al dato antes de ingresarlo en la consulta SQL.
http://www.php.net/intval
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 22/04/2009, 16:19
Avatar de aldo1982  
Fecha de Ingreso: noviembre-2004
Ubicación: Santa Fe (Argentina) Colon F.C
Mensajes: 1.362
Antigüedad: 19 años, 4 meses
Puntos: 6
Respuesta: 2 Funciones Anti SQL Injection - Cual es mejor para uds. ?

Cita:
Iniciado por David el Grande Ver Mensaje
Usa intval() al dato antes de ingresarlo en la consulta SQL.
http://www.php.net/intval
gracias, ahi use el is_numeric($_get[menu])
__________________
LA MUERTE ESTÁ TAN SEGURA DE VENCER QUE NOS DA TODA UNA VIDA DE VENTAJA
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 15:01.