Está en la página 1de 33

Facultad de Telemática

Desarrollo de Software Seguro


Profesor: Medina Sandoval Víctor Hugo
Actividad Proyecto Final
Alumno: Ramón Alejandro Aguirre Romero, Fernando Briceño Sánchez

Grado y grupo: 6º G 25 de mayo de 2023


Descripción del Proyecto
La farmacia los pollos hermanos está realizando un sistema de ventas e inventario para la farmacia, que estará conectado a una
base de datos en Mongodb en el cual se tendrá dos perfiles el de Gerente y los trabajadores o personal ambos perfiles tendrán
permisos y privilegios distintos. Por parte del Gerente de la farmacia tendrá permiso crear o registrar, leer, actualizar y borrar datos
de las diferentes tablas e información de la base de datos. La base de datos tendrá registros de proveedores, personal y
productos. Se pretende realizar una prueba de seguridad al sistema de ventas e inventario

Diagrama de arquitectura
Inventario de activos y matriz de riesgos

Plan de continuidad

CONTROLES DE SERVICIOS
CONFIDENCIALI INTEGRID DISPONIBILI
CONTROLES DAD AD DAD PROMEDIO
CATEGORIA
RECORDATORIOS EN DISPOSITIVOS
1 2 2 1.67
SERVICIOS INTELIGENTES
ESTABLECER COMO PAGO DOMICILIADO 1 2 3 2.00
USO DE SERVICIO SECUNDARIO 1 1 2 1.33
REVISIÓN Y REPORTE 1 2 2 1.67
REVISIÓN Y REPORTE 1 2 2 1.67
ESTABLECER COMO PAGO DOMICILIADO 1 1 2 1.33
REVISIÓN Y REPORTE 3 3 2 2.67
SERVICI USO DE RESPALDO A LA NUBE 3 2 2 2.33
OS REVISIÓN Y REPORTE 1 2 2 1.67
ESTABLECER COMO PAGO DOMICILIADO 1 1 2 1.33
REVISIÓN Y REPORTE 3 3 2 2.67
USO DE RESPALDO LOCAL 3 2 2 2.33
REVISIÓN Y REPORTE 1 2 2 1.67
ESTABLECER COMO PAGO DOMICILIADO 1 1 2 1.33
CONTROLES DE HARDWARE
TELÉFONOS CELULARES / MÓDEM DE
1 2 1 1.33
HARDWARE TELEFONÍA CELULAR
USO DE SERVICIO SECUNDARIO 1 1 2 1.33
REVISIÓN Y REPORTE 1 2 2 1.67
TELÉFONOS CELULARES / MÓDEM DE
1 2 1 1.33
TELEFONÍA CELULAR

TELÉFONOS CELULARES 1 2 1 1.33


USO DE SERVICIO SECUNDARIO 1 1 2 1.33
REVISIÓN, REPORTE Y ADQUISICIÓN 1 2 2 1.67
REVISIÓN Y REPORTE 1 2 2 1.67
HARDW 2 2 2 2.00
REPARACIÓN
ARE 2 2 2 2.00
REPUESTO
REEMPLAZO 2 1 2 1.67
MANTENIMIENTO 2 1 2 1.67
REVISIÓN 2 1 2 1.67
REVISIÓN Y REPORTE 3 2 2 2.33
REPARACIÓN 3 2 2 2.33
REPUESTO 3 1 3 2.33
MANTENIMIENTO 3 2 2 2.33
REPUESTO 3 2 2 2.33

CONTROLES DE SOFTWARE

VERIFICACIÓN DE CREDENCIALES DE
3 1 2 2.00
SOFTWARE USUARIO
CAMBIO A FÍSICO 2 2 1 1.67
RENOVACIÓN O CAMBIO DE
SOFTW 2 2 1 1.67
PROVEEDOR
ARE VERIFICACIÓN DE CREDENCIALES DE
3 1 2 2.00
USUARIO
CONTROLES DE DATOS

DOCUMENTACI
3 2 3 2.67
ÓN REVISIÓN Y REPORTE
REGISTRO LOCAL 3 1 3 2.33
DEPURACIÓN 3 2 3 2.67
REVISIÓN 3 2 2 2.33
REVISIÓN Y VERIFICACIÓN 3 2 2 2.33
DATOS SISTEMA DE CLASIFICACIÓN 3 2 2 2.33
VERIFICACIÓN DE CREDENCIALES
3 1 3 2.33
DE USUARIO
REVISIÓN 3 2 2 2.33
CONTROLES DE RECURSOS HUMANOS

RECURSOS
2 1 2 1.67
HUMANOS REGISTRO DE VIGILANCIA
ASEGURAMIENTO 1 1 3 1.67
DETECTOR CONTRA ROBOS 3 1 3 2.33
RECURSOS
HUMANOS PROCESO DE CONTRATACIÓN 3 2 2 2.33
TENER UN SUPLENTE CAPACITADO 3 1 2 2.00

CONTROLES DE VENTAS

VENTAS CORRECTA ORGANIZACIÓN/ACOMODO 1 1 1 1.00


CAMBIO DEL PRODUCTO 1 1 1 1.00
DETECTOR CONTRA ROBOS 1 1 1 1.00
VENTAS
REGISTRO DE VIGILANCIA 1 2 2 1.67
Requisitos de seguridad

Requerimientos funcionales del gerente


ID REQUISITOS CARACTERÍSTICAS Seguridad
Para el registro de los productos se requiere el ingreso de la
siguiente información:
- ID
Registrar
RFE-01 - Nombre
productos
- Precio
- Cantidad (al momento de ser registrado)
- Proveedor
Para el registro de los productos se requiere el ingreso de la
siguiente información:
- ID
Registrar - email Validar que el email sea un email
RFE-02
vendedores - Nombres Verificar que el usuario no se repita
- Apellidos
- Celular
- Edad
Se podrá observar una tabla de todos los vendedores registrados
Al revisar la información no afecta
RFE-03 Revisar en el sistema así como de la información que se ingresó en el
lo que se tiene guardado
vendedores registro.
Se podrá observar una tabla de todos los productos que hay en
Al revisar la información no afecta
RFE-04 Revisar inventario existencia así como de las características que se ingresaron al
lo que se tiene guardado
registrarlo.
En la tabla de observación de los vendedores se tendrá un botón
Modificar El usuario podrá modificar la
el cual al presionar convierte todos los labels a cajas de texto
RFE-05 información de los información la cual selecciona sin
editable en las cuales se puede editar toda la información que se
vendedores afectar a la celdas de información
ha registrado sobre el vendedor.
En la tabla de observación de los productos se tendrá un botón el
Modificar El usuario podrá modificar la
cual al presionar convierte todos los labels a cajas de texto
RFE-06 información de los información la cual selecciona sin
editable en las cuales se puede editar toda la información que se
productos afectar a la celdas de información
ha registrado sobre los productos.
En la tabla de observación de los vendedores se tendrá un botón El usuario podrá eliminar la
RFE-07 Eliminar vendedor el cual al presionar saltará una advertencia de que está por información la cual selecciona sin
eliminar un perfil y si está de acuerdo con su eliminación. afectar a la celdas de información
En la tabla de observación de los productos se tendrá un botón el El usuario podrá eliminar la
RFE-08 Eliminar productos cual al presionar saltará una advertencia de que está por eliminar información la cual selecciona sin
el registro del producto y si está de acuerdo con su eliminación. afectar a la celdas de información
El cuadro de búsqueda no será
vulnerable a ataques SQL.
En la tabla de observación se tendrá un cuadro de búsqueda el
RFE-09 Buscar productos El buscar un producto no causa
cual servirá para encontrar algún registro que se requiera.
modificaciones en el contenido de
la base de datos.
El cuadro de búsqueda no será
vulnerable a ataques SQL.
Buscar En la tabla de observación se tendrá un cuadro de búsqueda el
RFE-10 El buscar un vendedor no causa
vendedores cual servirá para encontrar algún registro que se requiera.
modificaciones en el contenido de
la base de datos.
Requerimientos funcionales del vendedor

ID REQUISITOS CARACTERÍSTICAS Seguridad


El empleado no puede realizar el registro de una
venta en la terminal de cobro sin autentificar al
usuario.

Los empleados deben ingresar su usuario y


El vendedor podrá realizar el registro de las
contraseña para utilizar su terminal de venta.
ventas de los productos disponibles dentro de
la tienda si:
Los empleados no podrán iniciar sesión con un
· Se inicia sesión en la terminal de venta
Registro de perfil o usuario diferente.
RFE-01 ingresando su usuario y contraseña.
Ventas Los empleados solo pueden registrar los
· Se escanean los códigos de barra para
productos dados por el cliente y que estén
capturar los productos vendidos.
registrados en la base de datos.
· Se debe registrar cada producto en la
Los empleados no pueden eliminar productos de
terminal de venta.
la lista de compra del cliente.
Los empleados no podrán modificar la cantidad de
productos.
Los empleados no podrán modificar el costo de
los productos.
Los empleados deben ingresar su usuario y
Los empleados podrán revisar en la base de contraseña para utilizar su terminal de venta.
datos los distintos productos si Los empleados no podrán iniciar sesión con un
· Se da de alta o inicia sesión en la terminal de perfil o usuario diferente.
RFE-02 Revisar inventario
cobro ingresando su usuario y contraseña. Los empleados no pueden eliminar productos del
· Se ingresa el ID o nombre de producto en el inventario.
buscador de la página. Los empleados no podrán modificar la cantidad de
productos y costos de la base de datos.

Los vendedores sólo podrán iniciar sesión con su


usuario y contraseña.
Los vendedores no podrán acceder a la terminal
con otro usuario diferente al suyo.
El usuario vendedor puede iniciar sesión en la
RFE-03 Autentificación terminal de venta con sus credenciales de No se podrá acceder, ni observar las funciones y
autenticación. estructura de la terminal e interfaz de la terminal
de cobro sin antes iniciar sesión.

No se podra relizar saltos en las diferentes


direcciones del sistema.
Solicitar Los vendedores deben solicitar la ayuda del
El vendedor puede solicitar la asistencia de su
RFE-04 asistencia del supervisor para poder realizar o completar
supervisor
gerente distintas acciones.
El empleado puede cobrar desde la terminal - El empleado no puede completar la venta con
de venta mediante: pago en efectivo si no se entrega una cantidad
igual o superior al costo total de los productos.
· Cobro en efectivo - El empleado no puede completar la venta con
- El empleado registra la cantidad con la cual pago con tarjeta de débito o crédito si la tarjeta no
RFE-05 Opciones de pago pagó el cliente. cuenta con fondos suficientes.
- En caso de que el pago del cliente sea - La terminal de venta no puede mostrar los datos
mayor al costo total de los productos se ingresados por el cliente al momento de pagar con
entrega la diferencia mediante cambio en tarjeta de crédito o débito.
efectivo. - El empleado debe recibir un mensaje que le
· Cobro con tarjeta de crédito indique si se realizó o se rechazó el pago.
Requerimientos no funcionales

ID REQUISITOS CARACTERÍSTICAS Seguridad


Los equipos físicos no
almacenan ningún tipo de
información agregada por el
usuario, ya sea usuarios,
contraseñas, búsquedas o
consultas.

Plataforma o El software de punto de venta está diseñado Las aplicaciones o software


RNF-01
sistema operativo para entorno de Windows. disponibles estarán limitadas
simplemente a los mínimos
necesarios.

No se podrá realizar descargas


e instalación de softwares
ajenos sin la autorización del
gerente.

El vendedor solamente podrá


utilizar el sistema para poder
realizar consultas, pero el
RNF-02 Base de datos La base de datos está en MongoDB
gerente tiene acceso completo
a todas las modificaciones
desde el sistema
El sistema está alojado de
El servidor es local desde la misma
RNF-03 Servidor manera local ya que no se
computadora
requiere un servicio en linea
Mientras la computadora este
La venta de productos está limitada al municipio
RNF-04 Disponibilidad encendida el sistema esta
de Colima.
accesible

Especificación de roles y servicios

Roles de usuarios Permisos y límites Uso típico


- Acceso a la lectura del inventario registrado en el sistema
El gerente de tienda se encarga
- Acceso a la lectura de los perfiles de vendedores en el
de administrar todas las
sistema
diferentes acciones que se
- Edición de los productos en el sistema
podrán realizar como lo son el
Gerente de tienda - Edición de los perfiles de los vendedores en el sistema
hecho de crear perfiles de
- Eliminación de los productos en el sistema
vendedores pero también podrá
- Eliminación de los perfiles de vendedores en el sistema
crear, eliminar, modificar los
- Creación de perfiles de vendedores
productos dentro del sistema.
- Búsqueda de los productos
- Acceso a la lectura del inventario registrado en el sistema
El vendedor podrá observar los
- Acceso al perfil del vendedor para observar la información
productos que se tienen en
Vendedor/Empleado con la cual se registró.
tienda además de poder observar
- Venta de los productos que hay en inventario
su perfil
- Búsqueda de los productos
Árboles de ataque
Permisos y roles

En nuestro software de sistema de ventas de la farmacia de los Pollos Hermanos, se tiene dos roles definidos que son el rol de
Gerente y el de Empleado.

El rol de Gerente cuenta con varios permisos dentro del sistema de ventas y las diferentes tablas de la base de datos, los
permisos que tiene el gerente son de escritura, verificación y modificación, en esta modificación se incluye la posibilidad de
eliminar la información de alguna de las tablas o cambiar su información.
Por su parte el vendedor sólo tiene permisos de verificación de productos dentro del sistema que cumple con su función de
cobranza en caja.
Software/ PLUG IN para revisión de código

Deep Scan
Deep Scan es excelente para escanear el repositorio de código Javascript conectando el repositorio de Github.DeepScan es una
herramienta de análisis estático para JavaScript y TypeScript. Se enfoca en detectar errores sutiles, problemas de calidad y
posibles problemas de seguridad en el código JavaScript. DeepScan utiliza técnicas de análisis avanzadas para identificar
patrones de código problemáticos y proporcionar recomendaciones de corrección.

ESLint

ESLint es una herramienta de linting para JavaScript. El linting es un proceso de análisis estático del código fuente para identificar
patrones problemáticos, errores y problemas de estilo. ESLint permite definir reglas personalizadas o utilizar conjuntos de reglas
predefinidas para ayudar a mantener un código limpio, consistente y libre de errores.
Al ejecutar ESLint en un proyecto, analiza los archivos de código y muestra advertencias y errores relacionados con posibles
problemas. Esto ayuda a los desarrolladores a mantener un código más limpio y coherente, mejorar la legibilidad y detectar
posibles errores antes de que se ejecuten.

ESLint puede integrarse en diversos entornos de desarrollo, como editores de texto, IDE (Entorno de Desarrollo Integrado) y
sistemas de construcción, lo que facilita su uso en el flujo de trabajo de desarrollo.

La configuración de ESLint se realiza a través de un archivo llamado .eslintrc o mediante el uso de plugins y extensiones
específicos para diferentes entornos de desarrollo.

Guías de buenas prácticas de codificación


ES5 frente a ES6: los componentes del código apuntan a ES5 para admitir navegadores más antiguos. Si no desea admitir estos
navegadores más antiguos, puede cambiar el destino a ES6 dentro del pcfproj de su carpeta tsconfig.json.
Importaciones de módulos: Empaque siempre los módulos que se requieren como parte de su componente de código en lugar de
usar scripts que deben cargarse usando la etiqueta SCRIPT. Por ejemplo, si desea utilizar una API de gráficos de terceros donde
el ejemplo muestra cómo agregar <script type="text/javascript" src="somechartlibrary.js></script> a la página, esto no sería
compatible dentro de un componente de código.
Linting: Linting es donde una herramienta puede escanear el código en busca de posibles problemas. La plantilla utilizada por pac
pcf init instala el módulo eslint a su proyecto y lo configura agregando un archivo.
ID Descripción Pasos Requeridos Datos de Prueba Resultado esperado
Usuario admin
Correo: admin@farma.mx
Contraseña: password
Se realiza un inicio de
Usuarios vendedores
Al entrar al servidor local me muestra sesión correcto y los
Correo: fare@farma.mx
CP-01 Iniciar Sesión que debo iniciar sesión y además manda a la página ya sea
Contraseña: password
validar el recaptcha como usuario gerente o
Correo: fbri@farma.mx
vendedor
Contraseña: password
Correo: vendedor@test.com
Contraseña: password
● El usuario es
correcto y se ha
Usuario de Gerente iniciado sesión
1.- Se debe iniciar sesión con una Contraseña de Gerente, correctamente.
cuenta de gerente Código de producto,
2.- Ingresar los datos de cada producto Nombre de producto, ● Se han guardado
(código de producto, nombre, cantidad Cantidad de producto, correctamente los
Registrar y precio) Precio del producto, datos del producto.
CP-02
productos 3.- Introducir los datos del proveedor Nombre de la empresa,
(empresa, tipo de empresa, correo, Tipo de empresa, ● Se han guardado los
teléfono, encargado y RFC) . Correo de la empresa, datos de la
4.- Guardar los cambios hechos. Teléfono de la empresa, empresa.
5.- Cerrar sesión del gerente Nombre de encargado
RFC de la empresa ● Se ha cerrado la
sesión
correctamente.
.

● Se ha iniciado
1.- Iniciar sesión con una cuenta de sesión
gerente. correctamente.
2.- Ingresar a la tabla de vendedores.
3.- Ingresar los datos de los nuevos Usuario de Gerente, ● Se han guardado
vendedores (Nombre del vendedor, Contraseña de Gerente, correctamente los
correo, dirección y teléfono) Nombre del vendedor, datos del producto.
Registrar
CP-03 3.- Generar usuario y contraseña para Correo del vendedor,
empleados
cada vendedor. Dirección del vendedor, ● Se han guardado los
4.- Otorgar permisos al vendedor. Teléfono del vendedor datos de la
5.- Guardar cambios en la tabla de empresa.
vendedor.
6.- Regresar a la pantalla de inicio. ● Se ha cerrado la
7.- Cerrar la sesión del gerente. sesión
correctamente.

1.- Iniciar sesión con una cuenta de


gerente.
Revisión de la Usuario de Gerente,
2.- Se ingresa a la tabla de empleados. Al revisar la información no
tabla de Contraseña de Gerente,
CP-04 3.- Se ingresa la consulta de un afecta lo que se tiene
empleados Nombre del empleado
empleado en el buscador. guardado
6.- Se regresa a la pantalla de inicio.
7.- Se cierra la sesión del gerente.
1.- Iniciar sesión con una cuenta de
gerente.
2.- Ingresar a la tabla de inventario.
3.- Realizar la búsqueda de un Usuario de Gerente,
producto mediante el código del Contraseña de Gerente, Al revisar la información no
Revisión de
CP-05 producto. Código de barras afecta lo que se tiene
inventario
4.-Se muestra la información del Nombre del producto guardado
producto buscado. Costo del producto
5. Se regresa a la pantalla de inicio.
6.- Se cierra la sesión de gerente.

1.- Iniciar sesión con una cuenta de


gerente.
2.- Se ingresa a la tabla de empleados. Usuario de Gerente,
3.- Se ingresa la consulta de un Contraseña de Gerente, El usuario podrá modificar
Modificar
empleado en el buscador. Nombre de empleados la información la cual
RFE-06 información de los
4.- Se modifican los datos de algún Telefono de empleado selecciona sin afectar a la
empleados
empleado seleccionado de la tabla. Correo electrónico celdas de información
5.- Se guardan los cambios Contraseña del usuario
6.- Se regresa a la pantalla de inicio.
7.- Se cierra la sesión del gerente.
1.- Iniciar sesión con una cuenta de
gerente.
2.- Ingresar a la tabla de inventario. Usuario de Gerente,
3.- Realizar la búsqueda de un Contraseña de Gerente, El usuario podrá modificar
Modificar
producto mediante el código del Codigo de barras la información la cual
RFE-07 información del
producto. Nombre del producto selecciona sin afectar a la
inventario
4.-Se muestra la información del Costo del producto celdas de información
producto buscado. Cantidad del producto
5. Se regresa a la pantalla de inicio.
6.- Se cierra la sesión de gerente.
1.- Iniciar sesión con una cuenta de
gerente.
2.- Se ingresa a la tabla de empleados.
3.- Se ingresa la consulta de un El usuario podrá eliminar la
empleado en el buscador. información la cual
RFE-08 Eliminar empleado
4.- Se puede inhabilitar/ eliminar a un selecciona sin afectar a la
empleado de la tabla de empleados. celdas de información
6.- Se guardan los cambios
7.- Se regresa a la pantalla de inicio.
8.- Se cierra la sesión del gerente.

En la tabla de observación de los


productos se tendrá un botón el cual al El usuario podrá eliminar la
presionar saltará una advertencia de información la cual
RFE-09 Eliminar productos
que está por eliminar el registro del selecciona sin afectar a la
producto y si está de acuerdo con su celdas de información
eliminación.
El cuadro de búsqueda no
será vulnerable a ataques
En la tabla de observación se tendrá
SQL.
un cuadro de búsqueda el cual servirá
RFE-10 Buscar productos El buscar un producto no
para encontrar algún registro que se
causa modificaciones en el
requiera.
contenido de la base de
datos.
El cuadro de búsqueda no
será vulnerable a ataques
En la tabla de observación se tendrá
SQL.
un cuadro de búsqueda el cual servirá
RFE-11 Buscar vendedores El buscar un vendedor no
para encontrar algún registro que se
causa modificaciones en el
requiera.
contenido de la base de
datos.

Cypress

Cypress es una herramienta de prueba de extremo a extremo que permite realizar pruebas automatizadas en aplicaciones web. A
continuación, se presenta un análisis de cómo Cypress se puede utilizar para probar el caso dado de una aplicación de venta en
una farmacia con diferentes roles de usuario (gerente y empleado/vendedor) y una base de datos que almacena información de
productos, productores y empleados.

1.- Pruebas de autenticación y roles de usuario


Cypress permite simular el inicio de sesión de diferentes usuarios y probar las funcionalidades según los roles asignados. Se
realizan pruebas para verificar que el gerente pueda consultar, agregar, modificar y eliminar campos de información, mientras que
los empleados solo puedan consultar productos. Pruebas que validen el acceso y la visibilidad correcta de las diferentes
funcionalidades según el rol del usuario autenticado.

2.- Pruebas de interacción con la base de datos


Cypress proporciona una API que permite interactuar con elementos de la interfaz de usuario y realizar acciones en la aplicación.
En el caso de una base de datos, las pruebas pueden validar que los datos ingresados en la interfaz de usuario se almacenen
correctamente en la base de datos y que las consultas de los usuarios se traduzcan en resultados correctos. Por ejemplo, se
pueden escribir pruebas que agreguen un nuevo producto a la base de datos a través de la interfaz de usuario y luego verifiquen
que el producto se haya almacenado correctamente y se pueda consultar correctamente.

3.- Pruebas de validación de datos


Utilizando las capacidades de aserciones de Cypress, se pueden escribir pruebas que validen la integridad de los datos
ingresados por los usuarios. Por ejemplo, se pueden verificar las restricciones de longitud de los campos, los rangos de valores
permitidos y la validez de los datos ingresados. Esto garantiza que los datos ingresados en la aplicación cumplan con las reglas y
restricciones establecidas.

4.- Pruebas de seguridad


Cypress puede ayudar a identificar posibles vulnerabilidades de seguridad en la aplicación. Se pueden escribir pruebas que
intenten explotar posibles vulnerabilidades, como intentos de inyección de código malicioso en formularios o consultas de base de
datos. Estas pruebas pueden ayudar a detectar y corregir posibles puntos débiles en la seguridad de la aplicación.
5.- Pruebas de rendimiento y escalabilidad
Cypress también puede utilizarse para realizar pruebas de rendimiento y escalabilidad. Se pueden simular múltiples usuarios
realizando acciones concurrentemente y evaluar cómo responde la aplicación. Esto puede ayudar a identificar posibles cuellos de
botella, problemas de rendimiento o limitaciones en la capacidad de respuesta de la aplicación bajo una carga de trabajo intensa.

Guías de buenas prácticas de configuración del servidor

NodeJS OWASP
Se utilizó como guía de buenas prácticas la documentación de NodeJS proporcionada por OWASP y las acciones que se
mencionan a continuación son para desarrollar en aplicaciones seguras de Node.js.

1. Implementar autenticación y autorización


Utilizar un sistema de autenticación para verificar las
credenciales de los usuarios y asignar roles o permisos
adecuados, como ejemplo de autenticación utilizando el

middleware passport y la estrategia local:


2. Configuración del tamaño máximo de carga útil

Este código configura una ruta POST '/upload' en tu servidor Express.js que limita el tamaño máximo de la carga útil y
realiza acciones específicas en función del tamaño del cuerpo de la solicitud recibida.

En estas líneas de código, estás utilizando Express.js para crear una


aplicación de servidor. También estás importando y utilizando el
middleware body-parser, que es una biblioteca de análisis de cuerpos de
solicitudes HTTP.
Body-parser se utiliza para analizar los cuerpos de las solicitudes
entrantes y convertirlos en objetos JSON para que puedan ser utilizados
en tu aplicación. En este caso, estás configurando body-parser para
analizar los cuerpos de las solicitudes como JSON y estableciendo un límite de tamaño máximo para la carga útil en 10 MB (10
megabytes).

En esta parte del código, se está configurando una ruta


POST en la aplicación para '/upload'. Cuando se recibe
una solicitud POST a esta ruta, se ejecutará la función de
devolución de llamada especificada.

Dentro de la función de devolución de llamada, se realiza


una verificación del cuerpo de la solicitud (req.body) para
asegurarse de que exista y que su longitud no exceda el
límite establecido de 10 * 1024 * 1024 (10 megabytes). Si
el cuerpo de la solicitud está dentro del límite, se procesan
los datos o se guardan en la base de datos y se envía una
respuesta con el mensaje 'Upload successful' (Subida exitosa). Si el cuerpo de la solicitud excede el límite, se envía una respuesta
con el código de estado 400 (Bad Request) y el mensaje 'Upload size exceeds the limit' (El tamaño de la subida excede el límite).

3. Validar los datos de entrada

Realizar validaciones adecuadas en los datos de entrada para evitar problemas de seguridad y garantizar la integridad de los
datos en la base de datos.

Se define una función llamada validarDatosEntrada que toma


un objeto datos como entrada y se encarga de validar los
campos de ese objeto.

En primer lugar, el código desestructura los campos requeridos


del objeto datos, como codigoBarra, nombre, marca, cantidad y
precio. Luego, se realizan una serie de comprobaciones para
garantizar que los datos cumplan con los criterios de validez.

La primera comprobación verifica que los campos requeridos


(codigoBarra, nombre, marca, cantidad y precio) estén
presentes en el objeto datos. Si alguno de los campos
requeridos no está presente, la función devuelve false,
indicando que los datos no son válidos.
La segunda comprobación verifica que los tipos de datos de los campos sean los esperados. En este caso, se espera que
codigoBarra sea una cadena (string), nombre y marca sean cadenas (string), cantidad sea un número (number) y precio sea un
número (number). Si algún campo tiene un tipo de dato incorrecto, la función devuelve false.

La tercera comprobación aplica reglas de validez adicionales a los campos. Por ejemplo, verifica que la longitud de codigoBarra
sea exactamente 13 caracteres, y que tanto cantidad como precio sean valores numéricos mayores que cero. Si alguna de estas
reglas no se cumple, la función devuelve false.

Si todas las comprobaciones son exitosas y los datos pasan las validaciones, la función devuelve true, indicando que los datos de
entrada son válidos.

4. Utilizar consultas parametrizadas en la base de datos

Se utiliza findOne() para buscar un documento en la colección


'productos' de la base de datos. La consulta está parametrizada
utilizando el objeto { codigoBarra }, donde codigoBarra es el
valor obtenido de los parámetros de la solicitud.
Se define una ruta GET en /productos/:codigoBarra, que espera
un parámetro codigoBarra en la URL para identificar un
producto específico por su código de barras. Dentro de la
función de controlador, se extrae el valor del parámetro
codigoBarra de la solicitud utilizando req.params.codigoBarra.
Esto permite obtener el código de barras proporcionado por el
cliente en la URL.

Luego, se utiliza db.collection('productos') para obtener una


referencia a la colección de MongoDB llamada 'productos'. A
través de esta referencia, se llama al método findOne() para
buscar un documento que coincida con el código de barras especificado. La consulta está parametrizada mediante el objeto {
codigoBarra }, donde codigoBarra es el valor extraído de los parámetros de la solicitud. Esto garantiza que el valor del código de
barras se pase de manera segura a la consulta, evitando posibles ataques de inyección.

5. Uso de contraseñas seguras y uso de CAPTCHA en el Login

Se establecen políticas de contraseñas que exijan contraseñas


fuertes, con una combinación de letras, números y caracteres
especiales. Además, almacena las contraseñas de manera segura
utilizando algoritmos de hashing y salting.

Los CAPTCHA ayudan a prevenir el acceso no autorizado de


bots automatizados en la aplicación. Al requerir la resolución de
un CAPTCHA, se dificulta la operación automatizada de estos
bots. Al agregar una capa adicional de autenticación se está
mejorando la seguridad de las cuentas de usuario al dificultar la
posibilidad de acceso no autorizado.
Repositorio de Github con el código
https://github.com/LexAguirre/Login-Protegido

Anexos
https://github.com/LexAguirre/Login-Protegido
https://nodejs.org/docs/latest-v18.x/api/
https://lenguajejs.com/automatizadores/web-dev-server/guia-tutorial-inicial-de-web-dev-server/
https://cheatsheetseries.owasp.org/cheatsheets/Nodejs_Security_Cheat_Sheet.html

También podría gustarte