Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/01/2005, 22:17
Avatar de stock
stock
 
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Prevenir un SQL-INJECTION

Hola a todos!!

En esta ocacion, quiero consultar a todos, estoy haciendo un buscador, funciona a la perfeccion, dicho buscador genera una sentencia SQL la cual regresara los registros encontrados, Lo que quiero hacer es ponerle eguridad a esto, por que pues asi como esta es muy facil poder hacer un SQL-INJECTION, por ahora y tengo una solucion, pero creo que no es la mejor, anyway, este es el codigo:

Código PHP:
<?
$PtrDb 
mysql_connect("localhost","CV4","****")or die ('No se puede conectar con la DB por que: ' mysql_error());
mysql_select_db("mybase");

$masdeuno="NO";
$sql="SELECT * FROM perfiles WHERE ";
$tam=strlen($sql);
if(
$matricula!="")
    
$sql.="Matricula='$matricula'";
else{
    if(
$nombre!=""){
        
$sql.="Nombre LIKE '%$nombre%'";
        
$masdeuno="SI";
    }
    if(
$apellido!=""){
        if(
$masdeuno=="SI")
            
$sql.=" AND ";
        
$sql.="Apellidos LIKE '%$apellido%'";
        
$masdeuno="SI";
    }
    if(
$residencia!=""){
        if(
$masdeuno=="SI")
            
$sql.=" AND ";
        
$sql.="Residencia='$residencia'";
        
$masdeuno="SI";
    }
    if(
$sexo!=""){
        if(
$masdeuno=="SI")
            
$sql.=" AND ";
        
$sql.="Genero='$sexo'";
        
$masdeuno="SI";
    }
    if(
$ciudad!=""){
        if(
$masdeuno=="SI")
            
$sql.=" AND ";
        
$sql.="Ciudad='$ciudad'";
        
$masdeuno="SI";
    }
    if(
$estado!=""){
        if(
$masdeuno=="SI")
            
$sql.=" AND ";
        
$sql.="Estado='$estado'";
        
$masdeuno="SI";
    }
    if(
$pais!=""){
        if(
$masdeuno=="SI")
            
$sql.=" AND ";
        
$sql.="Pais='$pais'";
        
$masdeuno="SI";
    }
}
//echo $sql."<br><br>";

if(strlen($sql)>$tam)
    
$res=mysql_query($sql,$PtrDb);
else{
    echo 
"Necesitas poner algo para buscar, no seas  FOOL";
    exit();
}

while(
$Info=mysql_fetch_assoc($res)){
    echo 
"Matricula: ".$Info['Matricula']."<br>";
    echo 
"Nombre: ".$Info['Nombre']."<br>";
    echo 
"Apellido: ".$Info['Apellidos']."<br>";
    echo 
"Residencia: ".$Info['Residencia']."<br>";
    echo 
"Sexo: ".$Info['Genero']."<br>";
    echo 
"Ciudad: ".$Info['Ciudad']."<br>";
    echo 
"Estado: ".$Info['Estado']."<br>";
    echo 
"Pais: ".$Info['Pais']."<br><br>";
}
?>
Ok, como vez es un buscador de personas, las busca deacuerdo a los datos introducidos en un formulario, como vez no estan validadas las entradas.

Para evotar el SQL-INJECTION pues se me ocurre, por ejemplo para la matricula, pues verificar que todos sean numeros, si hay una letra colada, pues entonces no se ahce nada, para la varible del nombre, pues determino un numero maximo de caracteres para este el cual sera el que tenga el nombre mas largo en la base de datos, para el apellido igual, i algo similar con las otras variables.

esta es mi solucion al problema, pero estoy seguro habra una mejor, espero y me puedan aconsejar y ayudar.

thanks

Última edición por stock; 04/01/2005 a las 22:19