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