Está en la página 1de 15

<Universidad Técnica del Norte>

FACULTAD DE INGENIERIA EN CIENCIAS APLICADAS CARRERA DE INGENIERIA EN


SOFTWARE

Sistema L.A.Z
Documento de la Arquitectura del Software
Versión 0.1
Materia: Seguridad Informática
Docente: Marco Pusda
Estudiantes: Cuascota Roberto, de la Torre Daniel, Pozo Carlos, Zamora Oliver
Fecha: 13/06/2023
Tema: OWASP

Historia de Revisión
Fecha Versión Descripción Autor

Roberto Cuascota P.

Versión inicial del documento, previa a Daniel De la Torre P.


09/06/2023 0.1
la Fase de Construcción del proyecto Bryan Fuentes M.
Carlos Pozo C.
Oliver Zamora F.

Tabla de Contenidos
Contenido
1. Introducción 3
1.1 Propósito 3
1.2 Alcance 3
1.3 Definiciones, Siglas, y Abreviaciones 3
1.4 Referencias 3
1.5 Vista Global 4

2. Representación Arquitectónica 4

3. Metas y Restricciones Arquitectónicas 4

4. Vista de Casos de Uso 5


4.1 Realizaciones de los casos de uso 5
4.1.1 Iniciar sesión – cerrar sesión 5
4.1.2 Registrar clientes 5
4.1.3 Generar factura 6
4.1.4 Registrar Prendas 6

5. Vista Lógica 7
5.1 Visión general 7
5.1.1 Diagrama de Clases 7
5.1.2 Iniciar sesión – cerrar sesión 7
5.1.3 Registrar clientes 7

2
5.1.4 Generar factura 8
5.1.5 Registrar Prendas 8

6. Vista de Implantación 8
6.1 Configuración Estándar 8

Vista de Implementación 9
6.2 Vista General 9

7. Vista de Seguridad 9
7.1 Modulo Control de Acceso Inicio de sesión: 9
7.2 Modulo Facturación: 10
7.3 Módulo de registro de clientes: 12
7.4 Módulo de inventario: 13
7.5 Módulo de reportes 14

1. Introducción

1.1 Propósito
El presente proyecto tiene como objetivo diseñar e implementar un sistema integral para una lavandería de
ropa, con el fin de mejorar sus operaciones y mejora de los usuarios. Se realizará con distintas tecnologías y
herramientas que permitirán gestionar, automatizar y controlar diferentes aspectos del negocio, desde la
recepción y clasificación de ropa hasta la entrega final al cliente.
1.2 Alcance
Definir y unificar los criterios de desarrollo del Sistema L.A.Z con respecto a los aspectos arquitectónicos
del proyecto, mostrando los detalles sobre los paquetes, capas y procesos que conformaran el sistema.
1.3 Definiciones, Siglas, y Abreviaciones
A continuación, presentamos las abreviaturas y definiciones de los términos de mayor importancia que se
encuentran en el documento.

L.A.Z: Sistema ERP


MVC: Modelo – Vista – Controlador. Estilo de arquitectura de software, frecuentemente visto en
aplicaciones Web, que divide los procesos en tres capas.
Maria db: Sistema de gestión de bases de datos derivado de MySQL.
MySQL: Es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual.
PHP: lenguaje de programación utilizado en el desarrollo web.
UTN: Universidad Técnica del Norte.
1.4 Referencias
 Documento de Visión del Sistema (v 1.0 – 02/05/2020).
 Documento de Especificación de Requerimientos del Sistema (v 1.0 – 19/05/2020).

3
1.5 Vista Global
Con el desarrollo del sistema L.A.Z ofrece una visión integral de una solución que tiene como objetivo
optimizar y agilizar los procesos de lavado y gestión de prendas. Este sistema interactúa con el empleado y
dueño del negocio, proporcionando una plataforma eficiente para la recepción, clasificación y seguimiento
de la ropa.
2. Representación Arquitectónica
La representación arquitectónica del Sistema L.A.Z se encuentra basada en el modelo de MVC. En el
transcurso del documento se tratará más a fondo los detalles de cada una.

3. Metas y Restricciones Arquitectónicas

Con el desarrollo del sistema Lavandería Mónica, se busca obtener una aplicación con un alto nivel de
portabilidad, fácil distribución y reusabilidad. En sus etapas iniciales, la aplicación será instalada en un servidor de
Apache con PHP y una base de datos MySQL localmente. Sin embargo, se busca obtener un producto de software
que se pueda instalar en cualquier servidor compatible con PHP y MySQL, con un mínimo esfuerzo y un
rendimiento óptimo.
Entre las restricciones principales del desarrollo del sistema Lavandería Mónica se encuentran: hacer uso de
tecnologías de software libre (en nuestro caso, el lenguaje PHP y el manejador de base de datos MySQL) y el uso
del patrón de diseño MVC para el desarrollo de la herramienta. Además, se aplicará la metodología OWASP (Open
Web Application Security Project) para garantizar un enfoque sólido de seguridad en la aplicación.
Por último, se tiene como meta lograr que el sistema Lavandería Mónica pueda ejecutarse sin percances en los
navegadores web Google Chrome, Mozilla Firefox, Opera, aplicando las mejores prácticas de seguridad definidas
por OWASP. De esta manera, se busca garantizar la utilidad y accesibilidad del sistema para la mayor cantidad de
usuarios posible, sin comprometer la seguridad de la aplicación.

Diagrama de bloques de la arquitectura del sistema

4
4. Vista de Casos de Uso
4.1 Realizaciones de los casos de uso
4.1.1 Iniciar sesión – cerrar sesión

Validar credenciales

Iniciar de Sesion Autenticacion de usuario


Sistema ERP

Usuario

Cerrar sesion

4.1.2 Registrar clientes

Opcion registrar usuario

Ingresa la cedula

Iniciar Sesion Registrar Clientes


Ingresa los nombres
Empleado

Ingresar Telefono

Finalizar Registro

5
4.1.3 Generar factura

generar_factura

eliminar_factura

usuario

ver_factura

imprimir_factura

4.1.4 Registrar Prendas

6
5. Vista Lógica
5.1 Visión general
5.1.1 Diagrama de Clases

7
5.1.2 Iniciar sesión – cerrar sesión
Clientes

- cedula : String
- nombre : String
- apellido : String
- telefono : String
+ <<Getter>> getCedula () : String
+ <<Setter>> setCedula (String newCedula) : void
+ <<Getter>> getNombre () iniciar sesion : String
+ <<Setter>>
- UsuariosetNombre
: int(String newNombre) : void Autenticacion
+ <<Getter>> getApellido
- Contraseña : string () : String
+ <<Setter>> setApellido (String newApellido) : void
+ <<Getter>> getUsuario () : int
+ <<Getter>> getTelefono () : String
+ <<Setter>> setUsuario (int newUsuario) : void + Verificarusuario() ()
+ <<Setter>> setTelefono (String newTelefono) : void
+ <<Getter>> getContraseña () : string + Verificarcontrseña() ()
+ <<Setter>> setContrasena (string newContraseña) : void

5.1.3 Registrar clientes


Cliente
- cedula : String
- nombre : String
- apellido : String
- telefono : String
+ <<Getter>> getCedula () : String
+ <<Setter>> setCedula (String newCedula) : void Servicio
+ <<Getter>> getNombre () : String
+ <<Setter>> setNombre (String newNombre) : void
+ <<Getter>> getApellido () : String
+ <<Setter>> setApellido (String newApellido) : void
+ <<Getter>> getTelefono () : String
- id_servicio : int
+ <<Setter>> setTelefono (String newTelefono) : void
- costo : int
+ <<Getter>> getid_servicio (
+ <<Setter>> setid_servicio (
+ <<Getter>> getcosto ()

Factura Detalles_Factura
numero : int - id_detalle : int
fecha : Date - servicio : Servicio
cliente : Cliente
+ <<Getter>> getid_detalle () : int
- detallesFactura : int
+ <<Setter>> setid_detalle (int newId_detalle) : void
+ <<Getter>> getnumero (): int + <<Getter>> getservicio () : Servicio
+ <<Setter>> setnumero (int newNumero): void + <<Setter>> setservicio (Servicio newServicio) : void
+ <<Getter>> getfecha (): Date
+ <<Setter>> setfecha (Date newFecha): void
+ <<Getter>> getcliente (): Cliente
+ <<Setter>> setcliente (Cliente newCliente) : void

8
Generar factura

5.1.4 Registrar Prendas

6. Vista de Implantación
6.1 Configuración Estándar
El Sistema de lavandería L.A.Z se está desarrollando utilizando una configuración sencilla de MySQL y
PHP para un emprendimiento local ubicado detrás del seguro. El sistema se hospedará y ejecutará desde un
servidor principal basado en PHP, que inicialmente será una computadora personal dedicada. Se utilizará
MySQL como el manejador de base de datos, que se ejecutará en el mismo servidor. Los usuarios podrán
acceder al sistema a través de estaciones de trabajo conectadas directamente al servidor a través de Internet,
sin embargo, no se requiere conocer la dirección IP del servidor como se mencionaba anteriormente. Para
utilizar el sistema, los clientes simplemente necesitarán ejecutar un navegador web en sus dispositivos.
Aunque en el ejercicio real no se aplica, se recomienda tener un servidor de respaldo para monitorear el
servidor principal y detectar cualquier falla que pueda ocurrir.

9
Vista de Implementación
6.2 Vista General

Para la implementación del Sistema de lavandería L.A.Z, se utilizará el patrón de diseño Modelo-Vista-
Controlador (MVC). Este patrón permitirá dividir el software en tres capas principales, brindando un mejor
entendimiento del sistema y facilitando las tareas de desarrollo y mantenimiento de la aplicación.

1. Modelo: El Modelo se encargará de procesar la información y gestionar los datos del sistema de
lavandería. En este caso, se utilizará un gestor de bases de datos MySQL para almacenar y admi-
nistrar los datos. Esta capa responderá a las solicitudes de información del estado del sistema pro-
venientes de la capa de Vista, así como a las instrucciones de modificación del estado enviadas por
la capa de Controlador.
2. Vista: La Vista será la capa encargada de presentar la interfaz de usuario al cliente. Aquí se
gene- rará el código para crear la interfaz de usuario utilizando lenguaje XHTML y componentes
de PHP. La Vista mostrará la información del sistema y permitirá capturar los datos ingresados
por los usuarios. Esta capa es la única que el usuario final podrá ver del sistema de lavandería.
3. Controlador: El Controlador actuará como intermediario entre la capa de Vista y la capa de Mo-
delo. Su función principal es recibir las solicitudes del usuario a través de la capa de Vista y trans-
mitirlas a la capa de Modelo. Posteriormente, recibirá los datos generados por la capa de Modelo
y los enviará de vuelta a la capa de Vista para su visualización al usuario. Este ciclo se repetirá
cada vez que el usuario realice una acción o genere una solicitud en el sistema de lavandería.

Con la implementación del patrón MVC, se logrará una estructura clara y organizada del sistema de lavan-
dería L.A.Z. El uso de MySQL como gestor de bases de datos y PHP para el desarrollo permitirá crear una
aplicación eficiente y fácil de mantener en el contexto de un emprendimiento local de lavandería.

7. Vista de Seguridad
7.1 Modulo Control de Acceso Inicio de sesión:

- Inicio de sesión:
Seguridad A07:2021 - Fallas en la Identificación y Autenticación: Al registrar el
ingreso de un usuario, es importante verificar y autenticar correctamente las credenciales,
el rol al que petence el usario que ingresara:

A. Verificar y autenticar las credenciales:

10
Al recibir las credenciales de inicio de sesión como nombre de usuario y contraseña,
asegurando de que se validen correctamente antes de permitir el acceso. Esto implica
verificar si las credenciales son correctas y corresponden a un usuario autorizado.

Ejemplo de aplicacion

if (!isset($_SESSION['usuario']) || !isset($_SESSION['rol']) || $_SESSION['rol'] !== 'administrador') {


// Redirigir a una página de acceso no autorizado
header('Location: acceso_no_autorizado.php');
exit();
}

B. Utiliza contraseñas seguras almacenadas de manera segura:

Es importante asegurarse de que las contraseñas se almacenen de manera segura en la


base de datos. Para ello, se recomienda aplicar técnicas de hash y almacenar solo la
versión hash de la contraseña. Puedes utilizar funciones de hash como bcrypt o
Argon2 en Laravel para generar y verificar los hash de contraseñas.

C. Implementar la autenticación de dos factores:

1. Durante el registro, solicita al usuario que proporcione su dirección de correo electrónico junto
con su nombre de usuario y contraseña.
2. Almacena de forma segura la dirección de correo electrónico asociada con el usuario en la base
de datos.
3. Cuando el usuario intenta iniciar sesión, solicita su nombre de usuario y contraseña como lo
harías normalmente.
4. Después de verificar las credenciales de inicio de sesión, genera un código de verificación único
y envíalo al correo electrónico registrado del usuario utilizando la función mail() de PHP o una
bi- blioteca de envío de correo electrónico, como PHPMailer o SwiftMailer.
5. El usurario debe escanear con su teléfono un código Qr para poder obtenerlos 6 dígitos para
acceder al sistema que verificará que es el usuario correcto

Ejemplo de aplicación
// Generar código de verificación único
$codigoVerificacion = generarCodigoVerificacion();

// Enviar código de verificación al correo electrónico del usuario


enviarCodigoVerificacion($codigoVerificacion, $emailUsuario);

7.2 Modulo Facturación:


- Registrar factura:
Seguridad A01: 2021 – Perdida de control de acceso: Control adecuado sobre quién
tiene acceso a las funciones y datos sensibles.
- Implementa un control adecuado sobre quién tiene acceso a la función de
registrar factura.
- Verifica la autenticación del usuario y sus permisos antes de permitir el acceso a
la función.
- Utiliza mecanismos de control de acceso, como roles y permisos, para limitar
el acceso solo a usuarios autorizados.
11
Manejo de los datos sensibles:

A. No almacenar datos de tarjetas de crédito o información confidencial en la base de


datos:
- En lugar de almacenar datos de tarjetas de crédito, se recomienda utilizar
servicios de pago confiables que cumplan con los estándares de seguridad, como
Stripe o PayPal. Estos servicios se encargan del manejo seguro de la información
confidencial y realizan las transacciones de forma segura.

B. Utilizar técnicas de cifrado para proteger los datos sensibles almacenados en la


base de datos:

- Puedes utilizar técnicas de cifrado para proteger los datos sensibles almacenados
en la base de datos, como los números de factura y los detalles del cliente.
Laravel, un framework de PHP, ofrece funcionalidades integradas para el
cifrado de datos utilizando la encriptación AES-256-CBC.

// Cifrado de datos
$encryptedData = encrypt($sensitiveData);

// Descifrado de datos
$decryptedData = decrypt($encryptedData);

C. Sanitizar y validar los datos ingresados por el usuario para prevenir ataques de in-
yección:

- Laravel proporciona funciones para sanitizar y validar los datos ingresados por
el usuario. Por ejemplo, puedes utilizar las reglas de validación integradas en
Lara- vel para asegurarte de que los datos ingresados sean válidos y seguros.

$validatedData = $request->validate([
'nombre' => 'required|string|max:255',
'telefono' => 'required|string|max:15',
]);

Seguridad al generar PDF:


Puedes utilizar la biblioteca PDF de TCPDF, que ofrece funcionalidades para generar
PDF seguros. Algunas medidas de seguridad que puedes implementar incluyen:
Establecer contraseñas de acceso al PDF:
Puedes configurar contraseñas de acceso para proteger el PDF de accesos no autorizados.
Esto permite que solo las personas con la contraseña correcta puedan abrir y ver el
contenido del PDF.
$pdf->SetProtection(['print'], 'user_password', 'owner_password');

Aplicar cifrado al PDF:


Puedes cifrar el PDF utilizando algoritmos de cifrado para proteger el contenido del
documento. TCPDF proporciona funciones para aplicar cifrado utilizando algoritmos
como AES.

12
Ejemplo de aplicación PDF utilizando el algoritmo AES-128
$pdf->SetProtection(['print'], '', null, 128, null, ['encrypt_metadata']);

7.3 Módulo de registro de clientes:


- Seguridad A02:2021 - Fallas Criptográficas: Almacenamiento seguro de las
contraseñas de los clientes en la base de datos. Se recomienda utilizar algoritmos de hash
seguros, como bcrypt, para almacenar las contraseñas de forma encriptada y evitar que
sean fácil- mente descifrables en caso de que la base de datos sea comprometida. Por
ejemplo, en PHP puedes utilizar la función password_hash() para generar el hash de la
contraseña y password_verify() para verificarla.
Ejemplo de aplicación:
// Almacenar la contraseña de forma segura en la base de datos
$contrasena = $_POST['contrasena'];
$hashContrasena = password_hash($contrasena, PASSWORD_DEFAULT);

- Seguruidad A05:2021 - Configuración de Seguridad Incorrecta: Asegurarse de que los


datos sensibles de los clientes, como las contraseñas, no se almacenen en registros de ac-
ceso público o se transmitan sin cifrar. Además, configurar correctamente los permisos
de acceso a los archivos y directorios relevantes para evitar accesos no autorizados.

- A07:2021 - Fallas en la Identificación y Autenticación: Implementar un proceso ade-


cuado de verificación de identidad y autenticación de los clientes durante el registro, in-
cluir la validación de la dirección de correo electrónico y la verificación de los datos per-
sonales proporcionados por el cliente.

Por ejemplo, al registrar un nuevo cliente, puedes realizar la validación del correo
electrónico y la generación de un token de activación para confirmar la dirección de
correo electrónico proporcionada por el cliente:
// Validar el formato del correo electrónico
$email = $_POST['email'];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// Mostrar mensaje de error
echo "El formato del correo electrónico no es válido.";
} else {
// Generar un token de activación
$tokenActivacion = generarTokenActivacion();

// Guardar el correo electrónico y el token de activación en la base de


datos guardarDatosCliente($nombre, $apellido, $email,
$tokenActivacion);

// Enviar correo electrónico de activación al cliente


enviarCorreoActivacion($email, $tokenActivacion);

// Mostrar mensaje de éxito al cliente


echo "Se ha enviado un correo electrónico de activación a su dirección. Por favor, siga las instrucciones para activar
su cuenta.";
}

13
7.4 Módulo de inventario:

- Seguridad A02:2021 - Fallas Criptográficas: Si necesitas almacenar información


sensi- ble relacionada con los productos de limpieza, como detalles de proveedores,
números de serie o precios de compra, es importante cifrar correctamente esos datos en la
base de da- tos. Utiliza algoritmos criptográficos seguros para proteger la
confidencialidad de la in- formación sensible. Además, asegúrate de proteger las claves
de cifrado adecuadamente. utilizar funciones de cifrado como AES_ENCRYPT y
AES_DECRYPT en MySQL para almacenar y recuperar información confidencial.

-- Ejemplo de inserción de datos cifrados en la base de datos


INSERT INTO productos_limpieza (nombre, precio, detalles)
VALUES ('Producto1', AES_ENCRYPT('12345678', 'clave_secreta'), AES_ENCRYPT('Detalles del producto 1',
'clave_secreta'));

-- Ejemplo de consulta de datos cifrados


SELECT nombre, AES_DECRYPT(precio, 'clave_secreta') AS precio, AES_DECRYPT(detalles, 'clave_secreta') AS
detalles
FROM productos_limpieza;

- Seguridad A05:2021 - Configuración de Seguridad Incorrecta: Configura los permi-


sos de acceso adecuados para los archivos y directorios relacionados con el inventario.
Limita el acceso solo a los usuarios autorizados y evita que los datos del inventario sean
accesibles por personas no autorizadas. En el caso de MySQL, asigna los permisos ade-
cuados a los usuarios para que solo tengan acceso a las tablas e información necesaria.

CREATE USER 'usuario_inventario'@'localhost' IDENTIFIED BY 'contrasena';


GRANT SELECT, INSERT, UPDATE, DELETE ON basedatos.productos_limpieza TO 'usuario_inventario'@'local-
host';

- Seguridad A06:2021 - Componentes Vulnerables y Desactualizados: Mantén actuali-


zados los componentes de software utilizados en la gestión del inventario, como los siste-
mas de gestión de bases de datos y las bibliotecas utilizadas. Mantener el software actua-
lizado ayudará a proteger contra vulnerabilidades conocidas y mantener la integridad de
los datos del inventario.

A. Actualizar la base de datos: Para mantener actualizado el sistema de gestión de


bases de datos en MariaDb, MySQL y laravel utilizado en tu aplicación hay que
aplicar las actualizaciones y parches de seguridad proporcionados por el provee-
dor.
B. Actualizar bibliotecas y frameworks: Utiliza bibliotecas y frameworks actuali-
zados en tu aplicación de lavandería. Verifica regularmente si hay nuevas versio-
nes y actualiza las dependencias de tu proyecto. Si estás utilizando un gestor de
dependencias como Composer en PHP.
C. Monitorizar y recibir alertas de seguridad: Mantén un seguimiento de las ac-
tualizaciones de seguridad y las noticias relevantes sobre las tecnologías que utili-
zas en tu aplicación, esto incluye una suscribirse a las notificaciones de seguridad

14
de Laravel y recibir alertas por correo electrónico cuando haya actualizaciones o
problemas de seguridad importantes.

if ($usuario->tienePermiso('agregar_producto')) {
// El usuario tiene permiso para agregar productos de limpieza
// Lógica para agregar el producto al inventario
// Guardar los cambios en la base de datos
// Mostrar mensaje de éxito al usuario
echo "El producto ha sido agregado al inventario correctamente.";
} else {
echo "No tienes permiso para agregar productos de limpieza.";
}

7.5 Módulo de reportes

- Seguridad A01:2021 - Pérdida de Control de Acceso: Para evitar la pérdida de control


de acceso en tu módulo de reportes, es importante implementar un sistema de
autenticación y autorización adecuado. En Laravel, puedes utilizar el middleware auth
para restrin gir el acceso a las rutas de generación de reportes a usuarios autenticados.

- Para prevenir la inyección de código malicioso en tu


Seguridad A03:2021 - Inyección:
módulo de reportes se debe utilizar consultas preparadas o bindings al interactuar con la
base de datos. En Laravel, puedes utilizar consultas preparadas mediante el uso de
Eloquent ORM o el constructor de consultas para evitar la ejecución directa de consultas
SQL construidas a partir de datos de entrada.

- Seguridad A04:2021 - Diseño Inseguro: Tener un diseño seguro en tu módulo de repor-


tes. Esto implica aplicar implementar firewalls de aplicaciones web, utilizar HTTPS para
cifrar las comunicaciones, y aplicar filtros de entrada y validación de datos para evitar la
introducción de información maliciosa en los reportes.
-
- Seguridad A06:2021 - Componentes Vulnerables y Desactualizados: Mantener
actualizados los componentes de software utilizados en la generación de reportes y las
biblio- tecas externas, se puede utilizar herramientas como Composer para administrar las
depen- dencias y actualizarlas regularmente.

15

También podría gustarte