Informática

Protección ante “inyección SQL” (II)

28 abril, 2016
inyección-SQL

Como comentábamos en la primera parte de este post, a continuación vamos a ver diferentes procedimientos para proteger nuestra aplicación web diseñada en PHP ante un posible ataque de inyección SQL.

Los diferentes procedimientos de protección ante un ataque de inyección SQL que vamos a ver son:

  • Prepared statements. Los prepared statements son sentencias pre-compiladas que podemos definir en la programación de nuestras páginas en las que debemos indicar los parámetros que van a introducir los usuarios por medio de formularios. De esta manera tendremos la posibilidad de especificar a la base de datos, por un lado, el código que vamos a ejecutar, y por otra parte, las variables que vamos a utilizar. Así el motor de la base de datos será capaz de diferenciar los datos de entrada y evitar la inyección SQL. Un ejemplo de este tipo de procedimiento podría ser la siguiente función en la que se limpian los datos los datos introducidos por un usuario en un formulario:

<?php

$input_arr = array();

foreach ($_POST as $key => $input_arr)

{

        $_POST[$key] = addslashes(limpiarCadena($input_arr));

}

 

$input_arr = array();

foreach ($_GET as $key => $input_arr)

{

        $_GET[$key] = addslashes(limpiarCadena($input_arr));

}

function limpiarCadena($valor)

{

        $valor = str_ireplace(«SELECT»,»»,$valor);

        $valor = str_ireplace(«COPY»,»»,$valor);

        $valor = str_ireplace(«DELETE»,»»,$valor);

        $valor = str_ireplace(«DROP»,»»,$valor);

        $valor = str_ireplace(«DUMP»,»»,$valor);

        $valor = str_ireplace(» OR «,»»,$valor);

        $valor = str_ireplace(«%»,»»,$valor);

        $valor = str_ireplace(«LIKE»,»»,$valor);

        $valor = str_ireplace(«–«,»»,$valor);

        $valor = str_ireplace(«^»,»»,$valor);

        $valor = str_ireplace(«[«,»»,$valor);

        $valor = str_ireplace(«]»,»»,$valor);

        $valor = str_ireplace(«\\»,»»,$valor);

        $valor = str_ireplace(«!»,»»,$valor);

        $valor = str_ireplace(«¡»,»»,$valor);

        $valor = str_ireplace(«?»,»»,$valor);

        $valor = str_ireplace(«=»,»»,$valor);

        $valor = str_ireplace(«&»,»»,$valor);

        return $valor;

}

?>

 

  • Stored procedures. Los stored procedures son métodos predefinidos que tienen algunas clases específicas como por ejemplo la clase mysqli, que aporta el método prepare para evitar ataques de inyección SQL que puedan vulnerar la integridad de nuestra base de datos. Un ejemplo de funcionamiento de este tipo de procedimiento lo puedes encontrar a continuación:

<?

class bdcon {

     protected $_db;

     public function __construct() {

                $this->_db = new mysqli ( DB_HOST, DB_USER, DB_PASS, DB_NAME );

 

                if ($this->_db->connect_errno) {

                               echo «Fallo al conectar a MySQL: » . $this->_db->connect_error;

                               return;

                }

 

                $this->_db->set_charset ( DB_CHARSET );

     }

}

 

//Definiendo una conexión con mysqli, aparecen métodos predefinidos como prepare para evitar la injection SQL

 

$sentencia = $this->_db->prepare ( «SELECT usua_nombre,usua_pass,usua_email FROM usuarios WHERE usua_id=?» );

?>

 

Escapar a todo dato ingresado por el usuario. Este método es el más utilizado por los programadores, puesto que es suficiente para la mayoría de los ataques de inyección SQL. El funcionamiento de este método es que cada vez que el usuario introduzca los datos que vayamos a utilizar en una sentencia SQL escaparemos de los caracteres especiales para que el dato este limpio y el motor de la base de datos no lo confunda con una sentencia maliciosa a ejecutar. La función que permite escapar de este tipo de caracteres es mysqli_real_escape_string.

En la mayoría de las ocasiones es suficiente con implementar una protección básica ante los ataques de inyección SQL que puedan vulnerar la integridad de nuestras bases de datos, pero si eres un obstinado de la seguridad, la implementación de algunos de estos procedimientos hará de tu aplicación web una aplicación segura y totalmente protegida ante este tipo de ataques.

Puedes compartir este artículo en:

    Deja un comentario

    Información básica acerca de cómo protegemos tus datos conforme al Reglamento General de Protección de Datos (Reglamento UE 2016/679) y en la Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales

    De conformidad con lo establecido en el Reglamento General de Protección de Datos, te informamos de:

    - Quien es el responsable del tratamiento: SEAS, Estudios Superiores Abiertos S.A.U con NIF A-50973098, dirección en C/ Violeta Parra nº 9 – 50015 Zaragoza y teléfono 976.700.660.

    - Cuál es el fin del tratamiento: Gestión y control de los comentarios del blog de SEAS. 

    - En que basamos la legitimación: En tu consentimiento.

    - La comunicación de los datos: No se comunicarán tus datos a terceros.

    - Los criterios de conservación de los datos: Se conservarán mientras exista interés mutuo para mantener el fin del tratamiento o por obligación legal. Cuando dejen de ser necesarios, procederemos a su destrucción.

    - Los derechos que te asisten: (i) Derecho de acceso, rectificación, portabilidad y supresión de sus datos y a la limitación u oposición al tratamiento, (ii) derecho a retirar el consentimiento en cualquier momento y (iii) derecho a presentar una reclamación ante la autoridad de control (AEPD).

    - Los datos de contacto para ejercer tus derechos: SEAS, Estudios Superiores Abiertos S.A.U. C/ Violeta Parra nº 9 –
    50015 Zaragoza (España) o través de correo electrónico a lopd@estudiosabiertos.com

    - También puedes ponerte en contacto con nuestro Delegado de Protección de Datos en dpd@estudiosabiertos.com

    Información adicional: Puedes consultar la información adicional y detallada sobre nuestra política de privacidad