30.06.2023

Protegiendo un Linux base de datos de inyección SQL

Familiarícese con los conceptos básicos de seguridad de aplicaciones web y cómo prevenir ataques a sus bases de datos. Como parte de la instrucción, domine las habilidades de búsqueda de vulnerabilidades y aprenda a aplicar varios métodos de protección contra este tipo de ataques para garantizar la seguridad de sus aplicaciones.

SQL

SQL (Structured Query Language) es un lenguaje que tiene reglas de sintaxis estrictas en la construcción de consultas y realiza la función de administrar bases de datos relacionales. SQL es un lenguaje declarativo, pero su dirección principal son las bases de datos, puede acceder a él directamente o puede usar un programaramlenguaje ming con bibliotecas preinstaladas.

Inyecciones SQL

La primera y principal acción de seguridad en cualquier sistema es bastante simple, necesitamos actualizar el software de la máquina. En Debian, este comando será:

sudo apt update && sudo apt upgrade -y

Captura de pantalla №1: Actualizar paquetes de máquina

Entonces usamos el Python biblioteca para solicitar nuestra base de datos. Descarga el paquete necesario:

pip instalar psycopg2

Captura de pantalla №2 — Instalar psycopg2

Si ve el mensaje de error "No se encontró el comando pip" en un Debian sistema>, ingrese este comando:

sudo apt-get install python3 pipas

Si ve el mensaje de error "No se pudo encontrar una versión que cumpla con el requisito psycopg2", ingrese este comando:

pip instalar psycopg2-binary

Para asegurarse de que puede escribir CLI:

pip --version

Captura de pantalla №3 — Instalación de pip

ParamConsultas eterizadas

Supongamos que tiene una aplicación web que permite a los usuarios buscar productos por nombre. En lugar de usar una consulta como:

SELECCIONE * DE productos DONDE nombre = 'término de búsqueda';

Necesitas usar un paramconsulta eterizada que puede predecir datos de entrada sin validación como en esta configuración:

SELECCIONE * DE productos DONDE nombre = ?;

Y pasar el término de búsqueda como parameter, por ejemplo, presente a continuación:

importar psycopg2

conn = psycopg2.connect(base de datos="mibd", usuario="miusuario", contraseña="micontraseña", host="host local", puerto="5432")

cur = conexión.cursor()

search_term = "manzana"

cur.execute("SELECCIONE * DE productos DONDE nombre = %s;", (término_búsqueda,))

filas = cur.fetchall()

para fila en filas:
imprimir (fila)

conn.close ()

Captura de pantalla №4 — Primer método

Validación de entrada

Supongamos que tiene un formulario donde los usuarios pueden enviar comentarios. Antes de insertar el comentario en la base de datos, valide la entrada para asegurarse de que solo contiene caracteres válidos. Por ejemplo, en PHP, puede usar la función preg_match para buscar caracteres alfanuméricos y spaces.

$comentario = $_POST['comentario'];

if (!preg_match('/^[a-zA-Z0-9 ]+$/', $comentario)) {
// Entrada inválida, haz algo
} Else {
// Insertar comentario en la base de datos
}

Captura de pantalla №5 — Segundo método

Acceso con privilegios mínimos

Tiene una base de datos con varias tablas y desea crear un usuario que solo pueda leer datos de una tabla. Cree un nuevo usuario y concédale solo privilegios SELECT en esa tabla. Ejemplo de visualización a continuación:

CREAR USUARIO readonly_user;
OTORGAR SELECCIÓN EN productos TO readonly_user;

Manejo de errores

Supongamos que tiene un formulario de inicio de sesión donde los usuarios pueden ingresar su nombre de usuario y contraseña. Si hay un error, como un nombre de usuario o una contraseña incorrectos, muestre un mensaje de error genérico en lugar de uno detallado. Por ejemplo, en Java, puede capturar la SQLException y mostrar un mensaje de error genérico.

tratar {
// Ejecutar consulta para verificar si el nombre de usuario y la contraseña coinciden
} captura (SQLException e) {
System.out.println("Error: No se pudo iniciar sesión.");
}

Captura de pantalla №6 — Tercer método

Protección contra la inyección de SQL

En conclusión, la seguridad de las aplicaciones web es un aspecto crucial del desarrollo de software. Ataques de inyección SQL son uno de los tipos más comunes de ataques a bases de datos que pueden causar daños significativos a una organización. Para evitar este tipo de ataques, es importante aprender los principios básicos del lenguaje SQL y sus vulnerabilidades, estudiar técnicas de inyección de SQL y analizar ejemplos de código que contienen vulnerabilidades de inyección de SQL.

Además, los desarrolladores deben aplicar varios métodos de protección contra Inyecciones SQL, como usar paramconsultas eterizadas, validación de entrada, acceso con privilegios mínimos y manejo de errores. Al implementar estas técnicas, los desarrolladores pueden garantizar la seguridad de sus aplicaciones y proteger los datos confidenciales del acceso no autorizado. Es esencial mantenerse actualizado con las últimas medidas de seguridad y mantener el software actualizado para evitar posibles vulnerabilidades.