Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/06/2005, 10:45
DarioDario
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 18 años, 11 meses
Puntos: 2
buenas, voy a explicarte un poco de que se trata esto...
Por ejemplo cuando tenemos q validar a un usuario la consulta sql es algo asi
Código:
"select * from TablaUsuario where nomb = ".$_GET['usu']." and pass = ".$_GET['pass'].""
pero q pasa si el atacante inserta algo q no corresponde, por ejemplo en el lugar del pass te pone asi "estepass" or pass != "" ... el color naranja es el pass q tendria q haber sido pasado por GET... entonces la consulta con inyeccion esa quedaria asi....
Código:
"select * from TablaUsuario where nomb = "UsuarioGET" and pass = "estepass" or pass != ""
entonces (aclaro la sintaxis no esta del todo bien es solomente de ejemplo para poder explicarlo) pasandonos por GET nos pasaron el nombre de usuario "UsuarioGET" y en lugar del pass nos paso " estepass or pass != "" ....
como el usuario lo va a encontrar y cuando se compare el pass dira q es incorrecto pero el " or pass != "" " como el campo pass siempre es distinto a NULL se podria logear con cualquier usuario... la unica frma de evitar esto es mediante el script en php se depure el string pasado, primero q nada sacando los caracteres "$%&/()@#;" porq estos se pueden usar en contra sulla y tener claro de limitar la cantidad de caracteres para los usuarios y los pass, por ejemplo el nombre de usuarios yo no permito q sean mayores a 15 digitos y los pass a 10, y cuando reciven los script de php verifico q no sean mayores a esos valores, si lo son hay un intento de hack... otra buena forma de evitar algunas cosas es q se encripte el pass del usuario y se guarde ya encriptado en la base de datos, y cada vez q se quieran logear solamente hay q encriptarlo y despues comparar el pass ingresado con el pass guardado...
aca dejo como manejo mas o menos los script contra esto, aclaro no es la mejor forma pero si bastante buena y nada complicada para entender...
Código PHP:
$pass $_POST['pass'];
$user $_POST['usuario'];

if(
$user != null and $pass != null)
{
        if( 
strlen($user) > 15 OR strlen($pass) > 10)
        {
                 exit(
"El Nombre de usuario o contraseña son mayores de lo permitido. vuelva atras e intentelo de nuevo.");
         }

        
//Saco los caracteres especiales...
        
$user eregi_replace("[<>%&'|!--.]","",$user);
        
$pass eregi_replace("[<>%&'|!--.]","",$pass);

        
$usercomp strtolower($user);

        
$base = new data_base;

        
$sql "select * from usuarios where nomb_user = '".$usercomp."' and password = '".md5($pass)."'"
despues es solamente enviar la consulta a MySql.... espero q te sirva de algo... cualquier cosa escribeme [email protected] ... saludos