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 consultarla 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’.
SEAS es el centro de formación online del Grupo San Valero, especializado en el ámbito técnico, industrial y de empresa. Visita www.seas.es para consultar nuestra oferta formativa de cursos y másteres. Formación profesional para el empleo de calidad y accesible para todos.
sergio tomas
15 noviembre, 2018 at 12:01 ambuen post!!parametrizacion, ips y control de versiones en el codigo