ATAQUES DE SEGURIDAD



INTRODUCCIÓN

Cuando tenemos como trabajo crear un nuevo sistema de información, hacer un mantenimiento, crear una nueva versión del sistema o lo que fuera, gran parte de nuestro esfuerzo lo dedicamos a las funcionalidades encargadas, dejando de lado detalles que a simple vista no tienen importancia y pasándolo por alto, como por ejemplo la seguridad en un sistema de información, pero que pasaría si por descuidar estos detalles el trabajo realizado es sometido a ataques de seguridad, pues observando esta problemática es importante poner ojo al asunto. Hoy comentaré sobre unos de los ataques comunes: "SQL INYECTION".

CASO PRÁCTICO

Un caso común es tener  un formulario donde un usuario pueda introducir datos ya sea para una consulta o actualización de registros, consideremos que ya tenemos creado un formulario en el cual haga una consulta a la base de datos, para obtener una lista de registros en este caso usamos una tabla creada(Autor) donde se consulta el nombre de una persona(Karla), nuestra consulta se vería de la siguiente forma: 

SELECT *FROM AUTOR WHERE NOMBRE LIKE 'KARLA'; 

Ahora, que pasaría si un usuario malintencionado puede modificar dicho registro  de la siguiente manera:

SELECT *FROM AUTOR WHERE NOMBRE LIKE 'KARLA' OR 1 = 1; 

1=1, es una lógica que indica que siempre la evaluación es "TRUE", en pocas palabras, esto trae todos los registros de una tabla, esto quizás con el fin de poder utilizar la información dentro de ella.

Ahora, consideremos que en lugar de concatenar la consulta(OR 1=1) concatena lo siguiente(drop table users;), esta consulta se vería de la siguiente forma:

SELECT *FROM AUTOR WHERE nombre like 'karla'; drop table autor;

Consiguiendo resultados desastrosos en la base de datos y destruyendo toda la información dentro de ella.

COMO EVITAR LOS ATAQUES DE INYECCIÓN SQL?

El principal problema radica principalmente en una mala práctica de programación dejando que el usuario introduzca libremente caracteres sin ningún tipo de control en nuestro aplicativo,¿Como evitar la inyección SQL?:

1. Buenas prácticas de programación

Como punto principal es evitar que el usuario pueda introducir cualquier tipo de caracteres en el aplicativo, para ello dentro de nuestro aplicativo podemos crear varias validaciones para ver que es lo que espera el aplicativo, por ejemplo  que cierto campo solo espere un valor numérico o alfanumérico según sea nuestra necesidad del caso, en PHP ofrecen funciones como como ctype_digit() para validar que sea numérico o  ctype_alpha() para saber si se trata de una cadena de texto, en otros lenguajes de programación también es usada la misma lógica, Java. .NET , C#, etc.

2. Asignar los privilegios necesarios para el usuario

El usuario que tengamos para conectar con la base de datos deberá de tener los privilegios justos para realizar las acciones que se necesitan, este usuario no se deberá de usar un usuario de tipo root para acceso a la base de datos ni un usuario que pueda eliminar tablas o modificarlas, esto le corresponde a una administrador de base de datos no a un usuario de sistema.  

CONCLUSIÓN

Es importante tomar nota sobre este tipo de ataque, ya que gran parte del problema se debe a una mala práctica de programación por lo que es de suma importancia ver todos los posibles escenarios, anticiparnos para crear sistemas robustos, en el siguiente post hablaré sobre otros ataques de seguridad para tener en cuenta.

Nos vemos hasta un próximo post.

Hasta luego!!

Comentarios

Entradas más populares de este blog

HOLA MUNDO CON LARAVEL

INTRODUCCIÓN A LAS VISTAS

Cross-site Scripting