SQL injection [2. Defensa]

Ya conoces el enemigo ahora defiéndete de él…

 

La defensa no es demasiado complicada, consiste “simplemente” en asegurarse de que los datos de entrada son seguros. Como el lenguaje que se usa en estos casos suele ser PHP, es el que usaré, pero los conceptos son los mismos.

 

La forma de filtrar la entrada cambia según el tipo de datos, si es un número, simplemente hay que interpretarlo como tal y desechar el resto, por ejemplo,de “65535 or 1=1” pasaría a ser “65535”. Esto se puede hacer con $variable_segura = intval($variable_insegura);
O, si es un número con coma flotante $variable_segura = floatval($variable_insegura);

 

Si es un dato alfanumérico, solo hay que usar la función mysql_real_escape_string(cadena) , que sanitiza la cadena.

 

Lo que hace la función mysql_real_escape_string es escapar los caracteres, haciendo que no tengan ningún significado especial, por ejemplo, un ‘ significa el final de una variable alfanumérica, pero con un \ antes (escapado), no significa el final, es solo una comilla en la variable, así, con $variable_segura = mysql_real_escape_string($variable_insegura);

 

Si $variable_insegura es ‘ or ‘1’=’1, la variable segura sería \’ or \’1\’=\’1 , como se puede ver, todo lo que tiene algún significado en SQL tiene un \ antes, así que se convierte en un carácter normal.

 

Eso es todo, tomando estas medidas de seguridad, el código está seguro contra las inyecciones SQL.

  • Sonia Espinoza

    No es aconsejable el uso de mysql_real_escape_string ya que se encuentra obsoleta y a futuro será removida de php, por ello se aconseja el uso de otras funciones.