Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
26 usuarios Online (0)
Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / tengo sql injetion en un code me lo explican?
1 respuestas recibidas | 43 visitas | Categoría PHP

tengo sql injetion en un code me lo explican?

Avatar de katyla
Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3

(Nivel 3 - 153 posts)

#0 Offline katyla Usuario hace 6días 15h  

Bueno miren tengo sql injetion en mi web... emntonces... el php es de registro de usuarios... el error esta cuando busco el nick y el mail.. para ver si esta reguistrado.. y si lo esta.. mando un mensaje diciendo k escojan otro nick o mail-..

la escanee la web y me marca el error en esto

Código PHP


$usuarios=mysql_query("SELECT nick FROM users WHERE nick='$user' ");

if($user_ok=mysql_fetch_array($usuarios))     {

echo " el usuario k ingresastes esta en uso por otra persona .. por favor escoje otro";

mysql_free_result($usuarios);

}



pero no se pork me dice k tengo sql injetion.. alguien k me explike el pork

Re: tengo sql injetion en un code me lo explican?

Avatar de krowork
Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3

(Nivel 3 - 199 posts)

#1 Offline krowork Usuario hace 6días 4h  
Hola katyla:

El SQL injection es cuando, por ejemplo, escribes en un campo de texto en un formulario código SQL de modo que se altera la sencentcia SQL original.
Si tu SQL en tu código es la siguiente 'SELECT nick FROM users WHERE nick=\''.$_POST['user'].'\'' y yo en el campo de texto escribo(comillas incluido): ' OR ''='
La sentencia que al final se ejecutará en el servidor de la BD será:
SELECT nick FROM users WHERE nick='' OR ''=''
la cual siempre es dará resultados. Esto tb se puede hacer con sentencias INSERT o DELETE y con todas las sentencias que tomen directamente datos pasados por el usuario.

Para asegurarse contra el SQL injection tienes que asegurar que el texto que se introduce no tiene ningún caracter que pueda alterar la sentencia.
El método más común (y creo q el menos acertado), es aplicar la funcion mysql_real_escape_string que inserta barras de escape '\' antes de cualquier caracter susceptible de alterar la sentencia SQL. Si lo haces en una sentencia INSERT cuando recuperas estos datos debes aplicarles la funcion stripslashes para quitar las barras.

La otra opcion es manejar los datos binariamente:
'SELECT nick FROM users WHERE nick=UNHEX('.bin2hex($_POST['user']).')');
Para recuperar los datos de una inserción hecha binariamente no es necesario aplicarle ninguna función.

Un saludo

http://krowork.blogspot.com

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster