Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Prevenir Inyección SQL

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en PHP al evitar ataques de inyección SQL mediante la validación de entradas. Las buenas prácticas de programación permiten desarrollar aplicaciones seguras y confiables.

Necesidad

Prevenir ataques de inyección de código SQL usando sentencias parametrizadas en PHP.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. La aplicación está construida en PHP 5.1.0 en adelante.

  2. La aplicación requiere de una conexión a una base de datos relacional a través del lenguaje de consulta SQL.

  3. Debe validarse la entrada de información antes de ser usada.

  4. Se desea evitar vulnerabilidades de tipo inyección SQL.

Solución

Al momento de desarrollar aplicaciones es necesario considerar que los usuarios finales tienen los conocimientos y herramientas necesarias para vulnerarlas. Esto permite crear aplicaciones seguras a través de buenas prácticas de programación.

Cuando se utilizan bases de datos que almacenan información sensible, es necesario proteger esta información adecuadamente. Uno de los tipos de ataque más comunes son las inyecciones de código SQL. En este ataque se introduce una consulta SQL maligna disfrazada en una de las entradas de la aplicación, la cual es ejecutada por el servidor. Esto le permite al atacante, sustraer, modificar o eliminar información de la base de datos. Por esta razón es importante realizar un proceso de validación en las entradas de la aplicación.

Existen diversos métodos para evitar las inyecciones SQL, disponibles según el lenguaje en que la aplicación fue desarrollada. Para el caso de este artículo, mostraremos cómo evitar ataques de inyección de código SQL en PHP utilizando sentencias parametrizadas. Para ello debemos seguir la siguiente serie de pasos:

  1. Para utilizar sentencias parametrizadas en PHP, se debe crear inicialmente un objeto de la clase MySQLi, indicando el nombre del servidor de base de datos, usuario de la base de datos, contraseña y nombre de la base de datos [1].

    mysqli object
    1
    $mysqli = new mysqli("ServidorBaseDatos", "USuarioBaseDatos", "Clave", "NombreBaseDatos");
    
  2. Utilice el método prepare de la clase MySQLi, pasando como parámetro la consulta SQL (de forma parametrizada) a ejecutarse en la base de datos [2].

    1
    2
    3
    4
    5
    6
    ...
    $query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)";
    
    //El objeto stmt tiene una referencia a la sentencia parametrizada
    $stmt = $mysqli->prepare($query);
    ...
    
  3. La variable $stmt es un objeto del tipo MySQLi_STMT, el cual tiene una referencia a la sentencia parametrizada creada anteriormente. Por medio de este objeto se debe utilizar el método bind_param con el propósito de pasar cada uno de los valores involucrados en la sentencia SQL.

    1
    2
    3
    4
    5
    ...
    $stmt->bindParam(1, $name);
    $stmt->bindParam(2, $countryCode);
    $stmt->bindParam(2, $district);
    ...
    
  4. Finalmente, para ejecutar la consulta SQL se debe utilizar el método execute de la clase MySQLi_STMT [3].

    1
    2
    3
    4
    ...
    
    $stmt->execute();
    ...
    



Haz un comentario

Estado de los servicios - Términos de Uso