Programación

Cómo evitar inyección de SQL en PHP

En esta nueva entrada vamos a hablar sobre qué es SQL, qué es la inyección de código SQL y cómo podemos evitarla en nuestro código PHP.

Las bases de datos se han convertido en algo esencial para organizar y distribuir la información de cualquier entorno informático. SQL se ha convertido en la forma más común de gestionar una base de datos, por ello es esencial saber qué es SQL y como emplearlo de forma segura.

¿Qué es SQL?

SQL (Structured Query Language) es un lenguaje de programación diseñado para administrar sistemas de gestión de bases de datos. Mediante SQL es posible crear, consultar, editar y borrar información de una base de datos. Es el lenguaje de programación más utilizado para gestionar bases de datos relacionales, es tan común, que se ha convertido en un estándar.

Tipos de bases de datos SQL

Existen distintos tipos de bases de datos que emplean SQL, aunque en la mayoría de ellas algunas sentencias cambian, la lógica a seguir es la misma y afortunadamente son todas muy similares.

Estos son los tipos bases de datos SQL:

Sin embargo, por muy práctico que sea SQL, si no se emplea adecuadamente puede suponer un problema grave de seguridad.

¿Qué es la inyección de código SQL?

El método de ataque de inyección de SQL es uno de los tipos de ciberataques más antiguos y utilizados. Si el desarrollador web no ha sido meticuloso, o no ha empleado los métodos correctos para realizar las consultas SQL a la hora de desarrollar el sitio web, puede dejar un resquicio de seguridad que los atacantes puede aprovechar.

El método consiste en añadir código SQL en lugares en los que se espera que el desarrollador web haya empleado este lenguaje de programación para realizar consultas u otro tipo de acciones relacionadas con la base de datos. Por ejemplo, durante el proceso de inicio de sesión, se emplean consultas a una base de datos. En ese momento, es posible añadir código SQL de modo que el inicio de sesión siempre sea efectivo, aunque el usuario y la contraseña no existan, de este modo, el atacante podría llegar a acceder a la plataforma, o incluso a la base de datos.

Por ello, a la hora de desarrollar consultas SQL hay que emplear buenas prácticas.

Como prevenir la inyección SQL en PHP

Hay varias practicas útiles a emplear para evitar la inyección de SQL, veamoslas.

Sanear los datos de entrada con los filtros nativos de PHP, por ejemplo:

//para Strings
$cadena= filter_var($nombre, FILTER_SANITIZE_STRING);

//para Email
$email= filter_var($email, FILTER_SANITIZE_EMAIL);

//para Integers
$numero = filter_var($numero, FILTER_SANITIZE_NUMBER_INT);

Usar consultas pre-compiladas. Este tipo de consultas evitan que el usuario pueda añadir código SQL ya que la consulta se compila previamente y no puede ser alterada. Por ejemplo:

//Conexión
$mysqli = new mysqli("mihost", "usuario", "contraseña", "basedatos");

$username = $_POST["usuario"];
$pass = $_POST["contraseña"];

$sentencia = $mysqli->prepare("SELECT * 
      FROM usuarios 
      WHERE username = ? 
      AND password = ?");
$sentencia->bind_param("ss", $username, $pass);
$sentencia->execute();

Emplear usuarios de base de datos con los privilegios estrictamente necesarios. Si a la hora de realizar la conexión a la base de datos usamos un usuario que solamente pueda consultar información, podemos evitar que los atacantes inyecten código SQL de borrado de tablas, o de inserción de nueva información.

Conclusión

Aunque la mayoría de las plataformas de hoy en día están preparadas contra la inyección de SQL, sigue siendo un problema cuando se emplean plugins o módulos de terceros, ya que pueden tener fallos de seguridad. Esto también puede ser un problema en sitios o aplicaciones web desarrolladas desde cero.

Siempre hay que tener cuidado a la hora de procesar la entrada del usuario y realizar las validaciones pertinentes.

En Caronte Web Studio desarrollamos sitios web empleando este tipo de prácticas seguras, si estás interesado puedes contactar con nosotros.

Caronte Studio

Entradas recientes

Cómo implementar Lazy Loading para imágenes y mejorar tu SEO

En este artículo, aprenderás qué es el Lazy Loading y cómo implementarlo fácilmente en tu… Leer más

2 horas hace

Presupuesto de rastreo o Crawl Budget: ¿Qué es y cómo mejorarlo?

En esta guía práctica, te explicamos qué es el presupuesto de rastreo, por qué es… Leer más

3 días hace

Qué es el call to action (CTA) y cómo hacer uno efectivo

¿Alguna vez te has encontrado con un mensaje que te invita a actuar, ya sea… Leer más

1 semana hace

¿Qué es una promesa en JavaScript? Todo lo que necesitas saber

Una de las preguntas más comunes entre los desarrolladores web que comienzan a usar JavaScript… Leer más

2 semanas hace

Preimpresión digital ¿Por qué es tan importante?

Descubre qué es y para qué sirve la preimpresión digital para conseguir una buena impresión… Leer más

2 semanas hace

Tipos de consentimientos para YouTube, Twitter, LinkedIn y TikTok

Ampliamos información para las redes sociales. Descubre cómo gestionar correctamente los consentimientos necesarios en las… Leer más

3 semanas hace