Almacenar información sensible en una base de datos sin cifrar no es bueno, pero ¿alguna vez lo has hecho por accidente debido a fallos en el código de tu aplicación o a una mala configuración de tu base de datos? ¿Y si hubiera una forma de recibir notificaciones cada vez que se detecta algo sensible para poder tomar medidas inmediatas?
Vamos a ver cómo aprovechar el Eventos de Couchbase para escribir funciones JavaScript que detecten cambios en los documentos a medida que se producen. En concreto, vamos a ver si aparecen números de la seguridad social en los documentos, cuando no deberían.
De cara al futuro, es importante tener en cuenta que éste es sólo uno de los muchos casos de uso posibles cuando se trata de eventos en Couchbase. El servicio Eventing está disponible desde Servidor Couchbase 5.5 que acaba de salir a la venta.
Tenga en cuenta que el constructor N1QL aún está en desarrollo. Esta función está destinada únicamente a fines de desarrollo y no debe utilizarse en entornos de producción.
Creación de una API RESTful con Node.js y Express Framework
En este ejemplo no vamos a enviar notificaciones. Eso es una nueva lata de gusanos. En su lugar vamos a crear una API de ejemplo que la base de datos hará ping cada vez que una función se activa. Esta API imprimirá un mensaje, pero en realidad tendrías que enviar una notificación push o un correo electrónico.
Crea un nuevo directorio en algún lugar de tu ordenador y ejecuta lo siguiente desde dentro de ese directorio:
1 |
npm init -y |
El comando anterior creará un nuevo proyecto Node.js, más concretamente un proyecto paquete.json archivo. Nuestra API no necesitará usar Couchbase para este ejemplo, pero necesitaremos un framework para recibir peticiones HTTP.
Dentro del proyecto, ejecute el siguiente comando:
1 |
npm instale express cuerpo-analizador --guardar |
El comando anterior instalará Express así como un middleware para aceptar cuerpos de petición en formato JSON.
Ahora cree un app.js dentro de su proyecto e incluya el siguiente código JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const Express = requiere("express"); const BodyParser = requiere("body-parser"); var aplicación = Express(); aplicación.utilice(BodyParser.json()); aplicación.utilice(BodyParser.urlencoded({ ampliado: verdadero })); aplicación.Correo electrónico:("/notificar", (solicitar, respuesta) => { consola.registro("POST /notify"); para(clave en solicitar.cuerpo) { si(solicitar.cuerpo.hasOwnProperty(clave)) { consola.registro(JSON.analizar(clave)); } } respuesta.enviar("enviado"); }); var servidor = aplicación.escuche(3000, () => { consola.registro("Escuchando..."); }); |
El énfasis de este tutorial no es la creación de una API con Node.js por lo que no voy a entrar demasiado en ello. Esencialmente estamos configurando un único punto final de la API, analizando los datos que entran, y los imprimimos en la consola. Esto se puede hacer con cualquier tecnología, no es específico de Node.js y en realidad probablemente estarías enviando algún tipo de mensaje cuando se activa el punto final.
Ahora podemos centrarnos en lo que importa, las funciones para Couchbase Server.
Creación de una función de escucha de cambios en documentos NoSQL
Como he dicho anteriormente, el servicio Eventing está disponible a partir de Couchbase 5.5, que acaba de ser lanzado.
Para tener éxito con el servicio Eventing a partir de ahora, necesitará dos Cubos.
En mi ejemplo, tengo un ejemplo Cubo y un ejemplo-eventos Cubo. Ambos son Buckets estándar, pero uno se utilizará para almacenar metadatos.
Ya que estaremos haciendo peticiones desde Couchbase Server a nuestra API de notificaciones, necesitamos configurar una lista blanca porque por defecto, ninguna petición puede salir de Couchbase Server por razones de seguridad.
En el Ajustes del panel de control de Couchbase, busque el icono Configuración avanzada de N1QL sección. Estoy ejecutando tanto Couchbase como la API localmente, por lo que sólo necesitaría añadir el host y el puerto. Tu configuración podría ser ligeramente diferente.
Ahora podemos seguir adelante y crear la función que vigilará los datos sensibles.
Cuando añada una nueva función, rellene la información para que coincida con los detalles de su Cubo. La lógica para controlar la función vendrá a continuación.
Con la función disponible, queremos editar el JavaScript. Por defecto, debería ver algo similar a lo siguiente:
1 2 3 4 5 |
función OnUpdate(doc, meta) { registro(documento, doc); } función OnDelete(meta) { } |
Nuestro objetivo es activar una función cuando se actualiza un documento, en lugar de cuando se elimina. Una serie de cosas tendrán que suceder.
- Comprueba si hemos creado o modificado un
persona
documento. - Mira el
ssn
del documento y ver si una expresión regular puede validarlo como un número de la seguridad social. - Envía una petición cURL a una API.
El código que explica los pasos anteriores puede verse a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
función OnUpdate(doc, meta) { registro(documento, doc); si(doc.tipo == persona) { var isSSN = /^(?:\d{3}-\d{2}-\d{4}|\d{2}-\d{7})$/; si(isSSN.prueba(doc.ssn)) { var http = SELECCIONE CURL( "http://localhost:3000/notify", { "solicitud": "POST", "cabecera": "application/json", "datos": $meta } ); http.execQuery(); registro(ssn, 'enviando notificación para ssn sin procesar') } } } |
Observe que estamos utilizando una consulta N1QL para emitir la petición cURL. No es la única manera, pero es una opción sobre la que se puede leer en la sección Documentación N1QL.
En nuestro ejemplo, en lugar de enviar el propio documento a nuestra API y exponer además el número de la seguridad social, enviamos la metainformación que incluye la clave del documento. Así, el destinatario puede buscar el documento basándose en la clave.
Conclusión
Acabas de ver cómo usar el servicio Couchbase Eventing para crear funciones y detectar información sensible como números de seguridad social. Puedes crear funciones para alterar datos dentro de la base de datos o para enviar notificaciones como se demuestra en este ejemplo.
Si desea obtener más información sobre el servicio Eventing, consulte la documentación en la dirección Portal para desarrolladores de Couchbase o leer el nuevo anuncio de servicio aquí. Más información sobre otras funciones disponibles en el Lanzamiento de Couchbase Server 5.5.