Shutterstock 625417832

Evitar SQL-Injection en Sistemas Cloud


Alexperfil
Brayhan Alejandro Gabriel Guerrero

Este artículo va enfocado al desarrollo seguro, Los ejemplos están escritos en el lenguaje Golang y pueden ser extrapolados a distintos lenguajes de programación.

En mi experiencia desarrollando software para la nube, me he dado cuenta de la gran necesidad que existe de desarrollar sistemas seguros, de minimizar las vulnerabilidades que pueden comprometer las capas del software más importantes, como lo es la Base de Datos.

A continuación se mencionan una serie de buenas prácticas para evitar el SQL-Injection al momento del desarrollo:

 

Clasifica los Datos

Se debe tener claro qué tipo de información puede o no ser compartida, modificada o añadida a nuestro sistema. Una vez clasificando la información de la manera más simple posible, podemos determinar los permisos y la interacción de los datos que se almacenan y se exponen.

Divide el Sistema en Capas

Evitemos a toda costa el código espagueti, ya que un sistema mal diseñado e implementado es la principal causa de vulnerabilidades, fallos y falta de escalabilidad. Existen paradigmas de Clean Architecture que orientan al equipo de desarrollo de software a optimizar y securizar la interacción de todas las capas y los elementos previamente abstraídos.

 

 

Valida Datos de Entrada

Ya que tenemos nuestro sistema segmentado por bloques o capas una de las primeras capas debe ser la de validación de datos de entrada. Esta capa debe verificar el tamaño, eliminar espacios que no son necesarios, en la medida de lo posible usar expresiones regulares que ayudarán a verificar el contenido ingresado. Existen librerías en cada lenguaje para hacer esta validación, pero es muy recomendable tener esta capa de validación con código propio para su mayor control.

Utiliza Variables Escapadas

Al momento de hacer la inserción de información en la base de datos de datos es necesario usar el sistema de escapado que tienen las librerías nativas o librerías oficiales que vinculan la conexión a la base de datos con el lenguaje. Existen también ORM que facilitan este escapado de variables. En el caso de no emplear un ORM es necesario escapar las variables y cuidar los concatenados de las consultas SQL.

Búsquedas Comunes

Ejemplo de un error Grave

query := `SELECT username, dirección, tipo  FROM usuarios WHERE username = “` + variableUsername + `” AND enable = 1` 

rows, err := dbUsuarios.Read.Query(query)
defer rows.Close()
if err != nil { 
    return err
}

Ejemplo Correcto

query := `SELECT username, dirección, tipo  FROM usuarios WHERE username = ? AND enable = 1` 
rows, err := dbUsuarios.Read.Query(query, variableUsername)
defer rows.Close()
if err != nil { 
    return err
}

Búsquedas Inexactas

Ejemplo de un error Grave

query := `SELECT username, dirección, tipo  FROM usuarios WHERE name LIKE “%` + varLikeName + `%” AND enable = 1` 

rows, err := dbUsuarios.Read.Query(query)
defer rows.Close()
if err != nil { 
return err
}

Ejemplo Correcto

Unicamente es necesario emplear el sistema de escape e inserción de go-mysql y la palabra reservada de mysql CONCAT para tener una consulta a prueba de SQL-Injection.

query := `SELECT username, dirección, tipo  FROM usuarios WHERE name LIKE CONCAT('%', ? , '%') AND enable = 1` 

rows, err := dbUsuarios.Read.Query(query, varLikeName)
defer rows.Close()
if err != nil { 
return err
}

Happy Hacking



Charly face
Carlos B
ha comentado hace 2 meses

Muy bueno el articulo, en estructuras tipo data lake los nombres de las tablas se encuentran codificadas de modo tal que cuesta hacer un ataque por injection. obvio sin conocer la organización.

Artículos que te pueden interesar


El siguiente tutorial sirve para implementar diversos comandos de pentesting para utilizar como herramientas colaborativas en este caso Slack. E... José Moreno


Continuar Leyendo

Pasos para resolver Servmon Hack The Box.Nmap Scan Enumerate FTP Enumerate Web Pages Exploit to NVMS-1000 (CVE : 2019–2085) Local Port Forwa... Elzer Pineda


Continuar Leyendo

Han pasado casi 3 años desde que el hacker conocido como @0xGiraffe revoluciona las redes con sus mensajes en apoyo del famoso youtuber PewDiePi... José Moreno


Continuar Leyendo