Como evitar SQL Injection en nuestra consultas PHP/MySQL

SQL Injection (esp. Inyección SQL) se define como:

[...] una vulnerabilidad informática en el nivel de la validación de las entradas a la base de datos de una aplicación. El origen es el filtrado incorrecto de las variables utilizadas en las partes del programa con código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o de script que esté incrustado dentro de otro. [...] - Wikipedia.

Pueden seguir leyendo en Wikipedia donde se explica detalladamente, incluso con ejemplos. Pero agrego mi aporte con estos ejemplos:

Una consulta vulnerable:

 
$query = "SELECT * FROM libros WHERE autor='$autor_nombre'";

mysql_query($query);

Usando mysql_escape_string para manejar como texto las comillas, y además sprintf para dar formato a la cadena.

 
$query = sprintf("SELECT * FROM libros WHERE autor='%s'",

mysql_real_escape_string($autor_nombre));

mysql_query($query);

Ahora si nuestra consulta trabaja con instrucciones como: LIKE, GRANT ó REVOKE. Esta es una forma más segura:

 
$query = sprintf("SELECT * FROM libros WHERE autor='%s'",

addcslashes(mysql_real_escape_string($autor_nombre),'%_'));

mysql_query($query);

addcslashes muestra una barra invertida antes de las caracteres definidos en el segundo parametro de esta función. 

Comentarios Comentarios formato RSS

  1. avatar lllllllllllll 2010-06-14 02:28:35 14 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  2. avatar cusco 2010-03-28 17:41:31 13 encontre hace unos dias una funcion en php que esla sigueinte htmlspecialchars() dice que es para renmplazar caracteres como & " ' < > por su reprecentaciones en html eso seria suficiente locolar en cada entrada en caso de los formularios??????????????
  3. avatar cusco 2010-03-28 17:32:23 12 y si cambio digamos las " ' ó < > por sus simblolos en html " < >
  4. avatar Fernando 2010-01-20 12:44:04 11 Excelentes sus consejos, me sirvió de mucho. ¡Muchas Gracias y sigan adelante!
  5. avatar Rodrigo (Nuevamente) 2009-03-19 10:06:51 10 Por ejemplo......

    function CStringSQL($string) {
    if (get_magic_quotes_gpc()) {
    return "'" . stripslashes($string) . "'";
    } else {
    return "'" . $string . "'";
    }
    }
  6. avatar Rodrigo 2009-03-19 09:56:11 9 Concuerdo con "Puaj", no siempre se tiene el control del servidor y del INI.

    No sean flojos, haganse una función que funcione SIN IMPORTAR LA CONFIGURACIÓN DEL SERVIDOR y olvídense de andar preguntando por ini's o cosas por el estilo.
  7. avatar Puaj 2009-03-01 20:04:08 8 "por que si se configura el php.ini correctamente con las magic quotes en on"

    Estás tú poco flipado.

    Poner el "magic quotes" en "on" no es precisamente configurarlo correctamente: no debes confiar nunca en que la configuración esté a tu gusta; además, hace el código menos portable (puedes no tener acceso al .ini del servidor). Por último, y más importante: ESTA FUNCION DEJARÁ DE ESTAR POR DEFECTO A "ON" EN PHP 6. ESTE VALOR POR DEFECTO ESTÁ "DEPRECATED"; NI LOS MISMOS AUTORES DEL PHP LO RECOMIENDAN.

    http://de.php.net/magic_quotes
  8. avatar mIRRO 2009-02-28 10:33:58 7 Excelente amigo
  9. avatar fdsfsdf 2009-01-06 14:29:54 6 http://www.yuotube.com/
  10. avatar jesusvld 2008-01-11 11:18:18 5 Gracias por el dato jonaytom, interesante funcion.

    Saludos :)

Dejar un comentario