| |||
| Este codigo evita sql injection? Hola a todos. Quería preguntaros una duda que me ha surgido. He estado probando y no he podido loguearme usando como contraseña tipicos ataques estilo 'or '1'='1 El código es el siguiente: NOTA: $password es una cadena codificada en MD5. $passwordNoMD5 es una cadena tal cual la recibo del usuario, sin comprobaciones de control ni nada.
Código PHP:
Ver originalCopiar Existe vulneración alguna? Gracias de antenamo. |
| ||||
| Respuesta: Este codigo evita sql injection? En tu código no se ve problema, aparentemente. Todo radica en la forma en que defines las variables que usas en la consulta, como no podemos ver que haces no se puede decir más.
__________________ http://is.gd/leeme |
| |||
| Respuesta: Este codigo evita sql injection?
Código PHP:
Ver originalCopiar |
| ||||
| Respuesta: Este codigo evita sql injection? A eso no me refiero, yo hablo de la manera en que defines tus variables antes de pasarlas a tu función. Código PHP:
__________________ http://is.gd/leeme |
| ||||
| Respuesta: Este codigo evita sql injection? ¿Esa es la forma real en la que asignas los valores?
__________________ http://is.gd/leeme |
| |||
| Respuesta: Este codigo evita sql injection? Con real te refieres a que si las variables se llenan de ese modo? En la realidad absoluta, tendría que poner el form con el action a un .php de validación. Después $username pasa por un control de datos y si cumple con los requisitos, lanzo la peticion login($username,md5($password),$password); No pondré todos esos pasos porque el kit de la cuestión es si la consulta no dará ningún error o si existe algún agujero de seguridad |
| ||||
| Respuesta: Este codigo evita sql injection? Bueno, con "real" efectivamente me refiero a la forma real en que ejecutarás dicho script. ![]() Si los datos provienen de un formulario debes validar y escapar todo valor, como regla general, jamás confíes en el usuario. Te sugiero que busques temas similares en el foro, hay bastantes.
__________________ http://is.gd/leeme |
| |||
| Respuesta: Este codigo evita sql injection? Nunca me fio del usuario. La variable $username la tengo bien controlado, el usuario no puede colar nada extraño. La variable $password se convierte en md5, con lo que no hay forma de que se cuele nada. La duda era en la variable $passwordNoMD5, es el único punto que me "preocupa". |
| ||||
| Respuesta: Este codigo evita sql injection? Pues entonces lo único que estás olvidando es escapar dicha variable.
__________________ http://is.gd/leeme |
| |||
| Respuesta: Este codigo evita sql injection? Bueno, yo veo problemas al no limpiar las variables en la consulta porque realmente no sabes los valores que le van a asignar a tus variables, yo siempre limpio mis variables utilizando sprintf el cual me devuelve una cadena formateada de acuerdo al tipo de dato que le estoy especificando por ejemplo si pongo %d estoy pidiendo que me devuelva un entero, si pongo %s estoy pidiendo que me devuelva una cadena, y adicionalmente uso la función mysql_real_escape_string() la cual coloca barras invertidas a los caracteres especiales para que no los tome en cuenta como parte de la consulta por ejemplo el apostrofe '. Ejemplo:
Código PHP:
Ver originalCopiar |
| |||
| Respuesta: Este codigo evita sql injection? has dicho antes:$passwordNoMD5 es una cadena tal cual la recibo del usuario, sin comprobaciones de control ni nada. Nunca me fio del usuario. La variable $username la tengo bien controlado, el usuario no puede colar nada extraño. La variable $password se convierte en md5, con lo que no hay forma de que se cuele nada. La duda era en la variable $passwordNoMD5, es el único punto que me "preocupa". pues inserta en tu formulario en el campo donde escriben tus usuarios digo y prueba haber que pasa osea que vallas al formulario desde tu web y en el campo donde escriben los usuarios escribes lo que te voy a decir <?php header("location:http://www.google.com")'; ?> y entra en una pagina donde llames a la variable $passwordNoMD5 de ese usuario para ver si se escapo o no veras lo que pasa
__________________ Lo mas sencillo es lo mas practico , comparto mis conocimientos con el mundo . Freelance diseño & programacion php , css , html , mysql . Última edición por webankenovi; 27/01/2012 a las 15:35 |
| ||||
| Respuesta: Este codigo evita sql injection? La pregunta es como inicializas las variables usuario y password. lo haces así?
Código PHP:
Ver originalCopiar o
Código PHP:
Ver originalCopiar o de que manera lo haces tu saludos.
__________________ Utilice el Highlight para mostrar código, mis ojos se lo agradecerán :) |
| |||
| Respuesta: Este codigo evita sql injection? Cita: Así lo tengo:
Iniciado por Ribon La pregunta es como inicializas las variables usuario y password. lo haces así?
Código PHP:
Ver originalCopiar o
Código PHP:
Ver originalCopiar o de que manera lo haces tu saludos.
Código PHP:
Ver originalCopiar |
| ||||
| Respuesta: Este codigo evita sql injection? Como dices al principio tu mismo, si pones algo como: ' or '1'='1 Debería convertir tu consulta en: $qry = "SELECT password FROM clients WHERE username='$username' AND password='$password' OR password='' or '1'='1'"; Por lo que debería entrar. Si no entra, será porque tenga las magic quotes de tu servidor activas, algo que no debería suceder: http://php.net/manual/es/security.magicquotes.php Para asegurarte, pasa ese valor en tu formulario y pinta un echo de la consulta y mira que saca y porque. |
| |||
| Respuesta: Este codigo evita sql injection? Si no entra creo que debe ser por eso: if ($client['password'] == $password || $client['password'] == $passwordNoMD5){ return true; En en caso que alguna contraseña de cualquier usuario coincidiera, sería un problema. Pero sería muy complicado, no? Estando codificado en sha1 Edito: ahora si que me accede al usuario usando como contraseña: ' or '1'='1 Usando mysql_real_escape_string se soluciona el problema Última edición por cslbcn; 30/01/2012 a las 06:26 |
| ||||
| Respuesta: Este codigo evita sql injection? Perdón, no me fije en esa parte, pues entonces no, no entraría, otra cosa es que hagas "lo mismo" 2 veces tanto en la SQL, como en PHP (preguntas si password = password en sus 2 variantes). Entonces sólo te quedaría saber si la función "mailControl", no se traga sqlInjection, en plan "usuario@usuario.com' or '1'='1' --" |
| |||
| Respuesta: Este codigo evita sql injection? la funcion que controla el formato del email no se traga el sql injection, está bien hecha. también puedo aplicar una capa intermedia que revise si la contraseña enviada sin codificar tenga el formato esperado, que es un alfanumerico. if(ctype_alnum($passwordNoMD5)) return true; |
| ||||
| Respuesta: Este codigo evita sql injection? Mmm mucha seguridad no ... De todas formas ahora se me acaba de ocurrir que te podrían hacer algo como: '; INSERT INTO clients (username, password) VALUES ('ppp@ppp.com', 'ppp')-- O bien: '; UPDATE clients SET password='ppp'-- Edito: Perdón la verdad es que no lei bién los otros Posts y me he ido por las ramas. Efectivamente, como te dijo Ribon, solucionas, cualquier intento de SQL Injection (mysql_real_escape_string) Última edición por jercer; 30/01/2012 a las 08:07 |
| |||
| Respuesta: Este codigo evita sql injection? Cita: decia en un campo x ejemplo de comentarios o asi dnde lo que escriban se muestre na mas
Iniciado por cslbcn No sé muy bien a que te refieres pero he puesto <?php header("location:http://www.google.com")'; ?> en el campo de username y en el campo password del formulario y no pasa nada... Si escribo eso en el campo username, me dice que el username no es valido. Si lo escribo en el password, me dice que el usuario no existe xq no coincide esa contraseña con la contraseña de la bbdd.. Esos errores son los que yo he puesto. yo usaria nada de md5 es mas sha1 con clave mas strip_tags para retirar etiquetas php y html del string
Código PHP:
Ver originalCopiar y al guardarla en la bd lo mismo para que coincidan
__________________ Lo mas sencillo es lo mas practico , comparto mis conocimientos con el mundo . Freelance diseño & programacion php , css , html , mysql . Última edición por webankenovi; 30/01/2012 a las 12:49 |