Informática

Protección ante “inyección SQL” – Parte 1

24 febrero, 2016
inyección-SQL

Una de las mayores vulnerabilidades que existen a la hora de crear una página web es la “inyección SQL”. Este ataque consiste en obligar a la base de datos a devolver datos que puedan vulnerar la seguridad de nuestro página web accediendo con permisos de usuarios administrador o incluso devolviendo usuarios y contraseñas almacenados en nuestra base de datos.

Si imaginamos un sistema de logueo en el que conocemos el usuario pero desconocemos la contraseña y escribimos “’OR ‘1’=’1’”  en el campo contaseña es probable que, si el sistema donde estamos probando no dispone de un control de inyección SQL, accedamos sin problemas.

A continuación se indican algunos consejos a la hora de tener en cuenta una protección ante estos ataques de inyección SQL en PHP.

  • Procura utilizar siempre comillas simples para delimitar las variables que vayas a utilizar en sentencias SQL que ataquen directamente a la Base de Datos.
  • Es aconsejable no utilizar el operador * en las queris SQL, sino que es mejor indicar el nombre de los campos que se vayan a consultar, si son muchos es mejor indicarlos que utilizar ese operador. Además esta práctica hará que la llamada a la base de datos sea más rápida y óptima.
  • Crea usuarios de conexión a la base de datos. El uso del usuario root es muy peligroso e implica que un usuario potencialmente hábil pueda tener acceso a toda nuestra estructura de la base de datos implicando que pueda acceder y modificar cualquier estructura de la misma.
  • Si a la hora de pedir datos en un formulario se conoce el tipo de dato concreto que se va a solicitar es bueno realizar una comprobación del tipo de dato introducido en el campo por medio de la sentencia gettype() que devolverá el tipo de la variable introducida en el campo. Si quieres ver más información sobre esa función puedes consultar aquí.
  • Es recomendable comprobar que nuestro servidor no cambia las variables pasadas desde un formularios o desde una URL, si este problema aparece es recomendable filtrar cada una de las variables mediante la siguiente sentencia: $_GET[$var] = str_replace(“‘”,”\'”,$_GET[$var]);

Además de estos consejos básicos de protección ante un ataque de injection SQL, PHP dispone de tres procedimientos más que evitan casi con total seguridad cualquier ataque de este tipo. Estos procedimientos son “prepared statemens”, “store procedures” y la acción de escapar a todo datos ingresado por el usuario.

En la segunda parte de este post puedes ver una explicación de cada uno de estos procedimientos, y si te interesa la seguridad informática, puedes solicitar información del Experto en Seguridad de Sistemas de Información.

No te pierdas la II Parte del post Protección ante ‘inyección SQL’.

  • Reply
    sergio tomas
    15 noviembre, 2018 at 12:01 am

    buen post!!parametrizacion, ips y control de versiones en el codigo

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)

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. C/Violeta Parra nº 9 50015
Zaragoza (España).
- 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