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
Publicar un comentario