Desarrollo web

Prevenir la inyección de SQL

Antes de hablar sobre cómo prevenir la inyección de SQL, debemos conocer el impacto del ataque de inyección SQL, pues, es uno de los ataques más peligrosos en la web.

El atacante puede robar tus datos o, peor aún, todo el servidor web puede ser robado por una vulnerabilidad de inyección SQL.


Escribí esta publicación para mostrarte cómo evitar la inyección de SQL.

Si necesitas saber más acerca de la inyección de SQL y sus tipos y todo lo demás, puedes hacer una simple búsqueda en google.

La solución es limpiar los parámetros de solicitud provenientes del usuario.

Ten en cuenta que la solución que compartiré contigo, no es como la mayoría de las soluciones en la web que van a cada declaración de SQL y limpian las variables de solicitud una por una.

Mi solución es prevenir la inyección de SQL sin interferir con los archivos CMS.

Bueno, tal vez alguien que está usando PHP diría que es fácil, solo está usando una función como  mysql_real_escape_string o mysqli_real_escape_string.

Pero eso funciona en una matriz dimensional, ¿qué tal una matriz multidimensional?

Bueno, tendríamos que iterar sobre elementos de la matriz recursivamente.

Entonces, lo que haremos es prevenir la inyección de SQL contra una matriz multidimensional.



Solución

Este código hace la magia para matrices simples y multidimensionales usando PHP:

La función de PHP utilizada para recorrer la matriz multidimensional de la solicitud es array_walk_recursive .

Simplemente coloca este código en la parte superior de tu sitio o archivo de encabezado, justo después de conectar a la base de datos. El archivo podría ser up.php o header.php o algo similar.

Esto es debido a que si usas este código antes de que ocurra la conexión, se mostrará un error, pues está usando la función mysql_real_escape_string que necesita una conexión SQL.

Si estás utilizando PHP 7, notarás que la extensión de MySQL se elimina, por lo que para que el código anterior funcione, deberás reemplazar la función mysql_real_escape_string con mysqli_real_escape_string.

Una última cosa que tengo que mencionar con respecto al código es que debes mantener los parámetros SQL entre comillas, en todas las páginas. Por ejemplo:

mysql_query("select * from users where email='$email'  order by id");

Advierte como la variable $email está entre comillas.

Sin comillas, la prevención de inyección de SQL no funcionará en una cadena como en la declaración anterior.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *