NoSQL

Revisión del 14:31 1 nov 2025 de Warid.F (discusión | contribs.) (Arreglo de categoria)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)

NoSQL

NoSQL (Not Only SQL) es un conjunto de sistemas de gestión de BD (bases de datos) diseñados para manejar grandes volúmenes de datos no estructurados o semiestructurados. A diferencia de los sistemas basados en SQL, los motores NoSQL no dependen de un esquema rígido de tablas y relaciones, lo que les otorga mayor flexibilidad, escalabilidad y rendimiento en entornos distribuidos.

En el ámbito de la seguridad, comprender el funcionamiento de NoSQL es crucial para proteger apps, srv y API modernas que utilizan bases de datos no relacionales.

Características principales

  • Sin esquema fijo: Los datos pueden almacenarse en distintos formatos (documentos, grafos, pares clave-valor o columnas).
  • Escalabilidad horizontal: Los datos se distribuyen entre múltiples srv o nodos, favoreciendo la expansión del sistema sin pérdida de rendimiento.
  • Alto rendimiento: Optimizado para operaciones de lectura/escritura masiva y consultas en tiempo real.
  • Alta disponibilidad (HA): Mediante replicación y redundancia entre nodos.
  • Flexibilidad: Ideal para apps con estructuras dinámicas y datos cambiantes.

Tipos de BD NoSQL

1. Clave-Valor
  • Almacenan información como pares de clave → valor.
  • Ideales para cache, sesiones de usr o cfg temporales.
  • Ejemplos: Redis, Riak, Amazon DynamoDB.
SET usr:1 "Darfe"
GET usr:1
2. Documentales
  • Los datos se almacenan en documentos tipo JSON o BSON.
  • Permiten consultas complejas sin esquema predefinido.
  • Usadas en apps web, móviles y microservicios.
  • Ejemplos: MongoDB, CouchDB, Firestore.
{
  "_id": 1,
  "nombre": "Darfe",
  "correo": "user@darfe.es",
  "rol": "admin"
}
3. Columnar
  • Organizan la información por columnas en lugar de filas.
  • Son ideales para análisis de datos y consultas masivas.
  • Ejemplos: Cassandra, HBase, ScyllaDB.
CREATE TABLE usuarios (
    id UUID PRIMARY KEY,
    nombre TEXT,
    edad INT
);
4. Grafos
  • Representan relaciones mediante nodos (entidades) y aristas (enlaces).
  • Ideales para apps de redes sociales, análisis de relaciones o motores de recomendación.
  • Ejemplos: Neo4j, ArangoDB, OrientDB.
CREATE (a:Usuario {nombre: "Darfe"})-[:SIGUE]->(b:Usuario {nombre: "Lía"})

Ventajas y Desventajas

Ventajas:

  • Escalabilidad masiva y alta disponibilidad.
  • Flexibilidad en el diseño de datos.
  • Ideal para sistemas distribuidos y de alta concurrencia.

Desventajas:

  • Falta de estandarización (cada motor usa su propia sintaxis o API).
  • Pérdida parcial de las propiedades ACID.
  • Complejidad en la replicación y la seguridad avanzada.

Seguridad y Buenas Prácticas

  • Validación de entradas: Evitar inyecciones NoSQL limitando los operadores permitidos.
  • Control de permisos: Asignar privilegios mínimos a los usr y srv de base de datos.
  • Autenticación y cifrado: Activar TLS y autenticación obligatoria.
  • Auditoría constante: Monitorear accesos y operaciones críticas.
  • Evitar exposición pública: No dejar puertos abiertos sin control (ej. :27017 en MongoDB).

Inyección NoSQL

Una inyección NoSQL ocurre cuando un atacante manipula una consulta construida dinámicamente (por ejemplo, en formato JSON), logrando acceder o modificar datos sin autorización.

Ejemplo de vulnerabilidad:

{
  "usr": {"$ne": null},
  "pass": {"$ne": null}
}

Esto fuerza la coincidencia de cualquier registro, permitiendo acceso no autorizado.

Prevención:

  • Usar consultas parametrizadas o funciones de validación seguras.
  • Sanitizar la entrada del usr y rechazar operadores como `$ne`, `$gt`, `$where`.
  • Aplicar autenticación robusta y limitar las respuestas de error.

Conclusión

NoSQL representa una evolución hacia sistemas más adaptables, distribuidos y escalables. Sin embargo, su potencia requiere una gestión cuidadosa en cuanto a configuración, permisos y seguridad de datos para evitar brechas críticas en entornos modernos de seguridad.