Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Generales: Maestría en: Seguridad de Tecnología de Información Asignatura: Seguridad de Sistemas y Aplicaciones Objetivo de la asignatura: Diseñar arquitecturas de seguridad para el desarrollo, operación y fortalecimiento de aplicaciones mediante la integración de distintos marcos de referencia y códigos de buenas prácticas. Nombre del profesor: Nombre del alumno: Datos de la Práctica Práctica 1 de 3: Objetivo de la práctica: Temas y subtemas asociados: Diseño e implementación de seguridad Garantizar que los datos ingresados por los usuarios sean seguros y cumplan con los formatos y restricciones necesarios para prevenir ataques de inyección y errores de formato por medio de html5. 3. Diseño e implementación de seguridad 3.1. La seguridad en el diseño 3.2. Pasos sobre la seguridad en el diseño 3.3. Errores comunes 3.4. Implementación 3.4.1. Buenas prácticas 3.4.2. Errores comunes Fecha: Duración (horas): 1hora Escenario: Laboratorio de Cómputo Software requerido: • • • • Equipo necesario en el escenario: Windows 10.0 o Superior Firefox / Chrome / Edge IDE Visual Studio Code Utilizar uno de los siguientes Servidores: o XAMPP o WampServer o Laragon Equipo de cómputo Dirección de Tecnología Educativa e Integración de Prácticas Página 1 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 1: Te solicitan desarrollar un sitio web para una institución gubernamental que requiere que los ciudadanos se registren para acceder a servicios en línea. Este registro recopila información importante, como la CURP (Clave Única de Registro de Población), el correo electrónico, el nombre, el apellido paterno y el apellido materno. Para garantizar la integridad de los datos y proporcionar una experiencia de usuario óptima, tendrás que implementar una validación de datos en el formulario de registro. Además, habrá que proporcionar mensajes de error personalizados cuando los usuarios ingresan datos incorrectos. Descripción del Formulario de Registro: CURP (Clave Única de Registro de Población): Se solicita a los usuarios ingresar su CURP, que es una identificación única en México. Utilizamos el atributo pattern para aplicar una expresión regular que verifica que la CURP ingresada cumple con el formato correcto. Si el usuario ingresa una CURP incorrecta, se muestra un mensaje de error. Correo Electrónico: El campo de correo electrónico utiliza el atributo type="email" para garantizar que los usuarios ingresen una dirección de correo electrónico válida. El navegador se encarga de la validación básica. Si el formato del correo electrónico es incorrecto, se muestra un mensaje de error. Nombre, Apellido Paterno y Apellido Materno: Estos campos son requeridos, lo que significa que el usuario debe completarlos. Si algún campo se deja en blanco, se muestra un mensaje de error indicando que es obligatorio. A continuación, el código html: <!DOCTYPE html> <html> <head> <title>Formulario de Registro</title> <style> .error { color: red; } </style> </head> <body> <h2>Registro de Datos Personales</h2> <form action="procesar_registro.php" method="post"> <label for="curp">CURP:</label> <input type="text" id="curp" name="curp" pattern="[A-Z]{4}[0-9]{6}[HM][A-Z]{5}[A-Z0-9]{2}" required> <span class="error" id="curpError"></span> <br> <label for="email">Correo Electrónico:</label> <input type="email" id="email" name="email" required> <span class="error" id="emailError"></span> <br> <label for="nombre">Nombre:</label> Dirección de Tecnología Educativa e Integración de Prácticas Página 2 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Desarrollo práctico 1: <input type="text" id="nombre" name="nombre" required> <span class="error" id="nombreError"></span> <br> <label for="ap_paterno">Apellido Paterno:</label> <input type="text" id="ap_paterno" name="ap_paterno" required> <span class="error" id="apPaternoError"></span> <br> <label for="ap_materno">Apellido Materno:</label> <input type="text" id="ap_materno" name="ap_materno" required> <span class="error" id="apMaternoError"></span> <br> <input type="submit" value="Registrar"> </form> <script> const curpInput = document.getElementById("curp"); const emailInput = document.getElementById("email"); const nombreInput = document.getElementById("nombre"); const apPaternoInput = document.getElementById("ap_paterno"); const apMaternoInput = document.getElementById("ap_materno"); curpInput.addEventListener("input", validateCurp); emailInput.addEventListener("input", validateEmail); nombreInput.addEventListener("input", validateNombre); apPaternoInput.addEventListener("input", validateApPaterno); apMaternoInput.addEventListener("input", validateApMaterno); function validateCurp() { const curpError = document.getElementById("curpError"); curpError.textContent = ""; } if (!curpInput.checkValidity()) { curpError.textContent = "La CURP no es válida."; } function validateEmail() { const emailError = document.getElementById("emailError"); emailError.textContent = ""; } if (!emailInput.checkValidity()) { emailError.textContent = "El correo electrónico no es válido."; } function validateNombre() { Dirección de Tecnología Educativa e Integración de Prácticas Página 3 de 17 Clave: MST332 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 1: const nombreError = document.getElementById("nombreError"); nombreError.textContent = ""; } if (!nombreInput.checkValidity()) { nombreError.textContent = "El nombre es requerido."; } function validateApPaterno() { const apPaternoError = document.getElementById("apPaternoError"); apPaternoError.textContent = ""; } if (!apPaternoInput.checkValidity()) { apPaternoError.textContent = "El apellido paterno es requerido."; } function validateApMaterno() { const apMaternoError = document.getElementById("apMaternoError"); apMaternoError.textContent = ""; if (!apMaternoInput.checkValidity()) { apMaternoError.textContent = "El apellido materno es requerido."; } } </script> </body> </html> Especificación del atributo "pattern": En primer lugar, se debe definir el atributo "pattern" en un campo de entrada HTML. Este atributo se agrega al elemento de entrada (por ejemplo, un campo de texto) que se desea validar. Expresión regular: Implica la creación de una expresión regular que se establece como el valor del atributo "pattern". Esta expresión regular define un patrón específico que los datos ingresados en el campo deben cumplir. Formato deseado: La expresión regular en el atributo "pattern" establece las reglas para el formato deseado de los datos. Puede ser una combinación de letras, números y otros caracteres que deben coincidir con el patrón definido. Mensajes de ayuda: Otra parte del "cómo" es proporcionar mensajes de ayuda para los usuarios. Estos mensajes, como se muestra en el ejemplo del atributo "title", ayudan a los usuarios a comprender qué se espera y qué sucede si no se cumple con el patrón. Validación en el lado del cliente: El navegador del usuario realizará la validación en el lado del cliente cuando el usuario ingrese datos en el campo. Si los datos no coinciden con el patrón especificado, el navegador mostrará un mensaje de error según el atributo "title." Dirección de Tecnología Educativa e Integración de Prácticas Página 4 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 1: Con base en lo anterior: 1. 2. 3. 4. 5. 6. 7. Apoyándose con el IDE Visual Studio Code para escribir el código html5. Utilice los tabuladores para ordenar el código html5. El archivo tendrá que ser guardado con el nombre index.html No olvidar la extensión .html. Terminando de transcribir el código abrir el archivo con un navegador. Comprueba las validaciones de las cajas de texto. Agregar una caja de texto extra que pueda validar el RFC. El RFC (Registro Federal de Contribuyentes) en México tiene un formato específico que consta de tres letras iniciales, seguidas por seis dígitos, y luego un dígito o letra que sirve como carácter de verificación. Para validar un RFC en HTML5 utilizando el atributo "pattern", puedes utilizar la siguiente expresión regular: <input type="text" name="rfc" pattern="[A-Z]{3}[0-9]{6}[A-Z0-9]{1}" required> Resultados obtenidos: Cuando se utiliza el atributo "pattern", el navegador web verifica automáticamente si el valor ingresado en el campo coincide con el patrón especificado antes de permitir que el formulario se envíe. Si el valor no coincide con el patrón, el navegador mostrará un mensaje de error y no permitirá que el formulario se envíe hasta que se proporcione un valor que cumpla con el patrón. Evidencia de la práctica: (fotografías, videos, archivo, etc.) Proporcionar capturas de pantalla que muestren cómo se rellena y se envía el formulario con datos válidos y cómo se manejan los mensajes de error cuando se ingresan datos inválidos. Conclusiones: El estudiante deberá escribir en media cuartilla las conclusiones de la práctica, así como su opinión respecto a la utilidad de las validaciones de campos. Dirección de Tecnología Educativa e Integración de Prácticas Página 5 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Bibliografía: HTML5Pattern. (s/f). Html5pattern.com. https://www.html5pattern.com/ Recuperado el 20 de septiembre Criterios de evaluación: • • Diseño de las cajas de texto con su longitud de datos. Validación de los datos Dirección de Tecnología Educativa e Integración de Prácticas Página 6 de 17 de 2023, de Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Datos de la Práctica 2 Práctica 2 de 3: Objetivo de la práctica: Temas y subtemas asociados: Evaluación de Seguridad con OWASP Top Ten Identificar y abordar las principales vulnerabilidades de seguridad en una aplicación web utilizando la lista OWASP Top Ten como referencia. 4. Seguridad en las operaciones 4.1. La seguridad como un problema organizacional 4.2. Buenas prácticas 4.2.1. Verificación funcional en el entorno productivo 4.2.2. Verificaciones periódicas 4.2.3. Control de cambios, versiones y documentación 4.3. Errores comunes 4.3.1. Fallos en la documentación y el control de versiones 4.3.2. Fallos en las actualizaciones Fecha: Duración (horas): 30 minutos Escenario: Laboratorio de Cómputo • • • • Software requerido: Windows 10.0 o Superior Firefox / Chrome / Edge IDE Visual Studio Code Utilizar uno de los siguientes Servidores: o XAMPP o WampServer o Laragon Documentación https://owasp.org/www-pdfarchive/Gu%C3%ADa_de_pruebas_de_OWASP_ver_3.0.pdf Equipo necesario en el escenario: Equipo de Cómputo Desarrollo práctico 2: Tienes la tarea de evaluar una aplicación de comercio electrónico. En cuanto a la relación al proceso de evaluación de seguridad estos son los puntos que tienes que considerar: Recolección de información: Implica recopilar datos sobre la arquitectura de la aplicación, que incluye la identificación de sus componentes, servidores, bases de datos y puntos de acceso. También se trata de conocer las tecnologías utilizadas en la aplicación, como el lenguaje de programación, el sistema operativo, el servidor web y la base de datos. Implica recopilar información mediante la revisión de documentos, análisis de código fuente y escaneo de redes y servidores. Evaluación de la autenticación: Se refiere a la evaluación de los mecanismos de autenticación utilizados en la aplicación, incluyendo contraseñas, autenticación de dos factores y políticas de bloqueo de cuentas. Dirección de Tecnología Educativa e Integración de Prácticas Página 7 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 2: También se trata de verificar si se aplican controles de contraseñas y se evita el almacenamiento en texto claro. La evaluación implica intentar el acceso a la aplicación con diferentes credenciales y comprobar cómo responde el sistema a las pruebas de autenticación. Autorización y control de acceso: En este caso consiste en evaluar los roles y permisos asignados a los usuarios, y asegurarse de que estén configurados adecuadamente para evitar el acceso no autorizado a recursos sensibles. Se analiza cómo se gestionan los roles y permisos de usuario en la aplicación, y se realizan pruebas para determinar si es posible acceder a recursos no autorizados. Manejo de sesiones: Se refiere a verificar si las sesiones de usuario están protegidas contra ataques como la suplantación de sesión (session hijacking) o la inyección de sesión (session fixation). Se pueden realizar pruebas para identificar vulnerabilidades en el manejo de sesiones, como la interceptación o la inyección de sesiones. Evaluación de la capa de aplicación: Involucra realizar pruebas de seguridad para identificar vulnerabilidades, como inyección SQL, ataques XSS (Cross-Site Scripting) y CSRF (Cross-Site Request Forgery). También se trata de asegurarse de que se implementen controles adecuados para la entrada y salida de datos en la aplicación y con las pruebas de penetración para buscar vulnerabilidades conocidas, como inyección SQL o ataques XSS. Se evalúa cómo la aplicación procesa y valida los datos de entrada. Para comprobar los puntos anteriores se debe seguir los siguientes pasos para la instalación de OWASP: Paso 1 - Familiarización con OWASP Top Ten: Comienza estudiando la lista de las 10 amenazas de seguridad más importantes según OWASP. Descubre que "Inyección SQL" es una de las vulnerabilidades más críticas. Paso 2 - Búsqueda de Vulnerabilidades: Realiza un análisis minucioso de la aplicación y encuentras que el formulario de búsqueda de productos es vulnerable a la inyección SQL. Un atacante podría ingresar código malicioso en ese campo. Paso 3 - Priorización y Mitigación: Prioriza la vulnerabilidad y decide solucionarla. Aprendes sobre sentencias SQL preparadas y las aplicas para corregir la vulnerabilidad en el formulario de búsqueda. Paso 4 - Pruebas y Mejoras: Realiza pruebas exhaustivas para asegurarte de que la vulnerabilidad se haya resuelto. También aprendes sobre otras medidas de seguridad recomendadas por OWASP y las aplicas para mejorar la seguridad general de la aplicación. Con base en lo anterior: Puedes visitar páginas web, como https://www.cyberpuerta.mx, https://mx.ebay.com, entre otras. Dirección de Tecnología Educativa e Integración de Prácticas Página 8 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Resultados obtenidos: Identificar y mitigar la vulnerabilidad de "Inyección SQL" en el formulario de búsqueda de productos de la aplicación de comercio electrónico. Evidencia de la práctica: (fotografías, videos, archivo, etc.) Un informe que enumera las vulnerabilidades de seguridad identificadas en la aplicación, incluyendo detalles sobre la vulnerabilidad de "Inyección SQL" en el formulario de búsqueda. Conclusiones: El estudiante deberá escribir en media cuartilla las conclusiones de la práctica, así como su opinión respecto a la utilidad OWASP. Bibliografía: OWASP foundation, https://owasp.org/ theOpenSourceFoundation for Application Security. (s/f). Owasp.org., de Criterios de evaluación: • • Evaluar la capacidad del estudiante para identificar y documentar adecuadamente las vulnerabilidades de seguridad en la aplicación, en particular la vulnerabilidad de "Inyección SQL". Evaluar la capacidad del estudiante para implementar medidas de seguridad efectivas para abordar la vulnerabilidad, como el uso de sentencias SQL preparadas. Dirección de Tecnología Educativa e Integración de Prácticas Página 9 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Datos de la Práctica 3 Práctica 3 de 3: Objetivo de la práctica: Temas y subtemas asociados: Creación de una página web para una tienda de artículos deportivos Crear e Identificar las vulnerabilidades de una página web profesional y funcional que represente una tienda de artículos deportivos y permita vender productos en línea de manera efectiva. 5. Desarrollo de pruebas de seguridad 5.1. Buenas prácticas 5.2. Pruebas de intrusión de aplicaciones 5.2.1. Recopilación de información 5.2.2. Verificación de los sistemas de autenticación 5.2.3. Verificación y gestión de sesiones 5.2.4. Pruebas a los mecanismos de autorización 5.2.5. Pruebas a la lógica de negocio 5.2.6. Validación de datos 5.2.7. Pruebas de robustez ante negación de servicios 5.3. Casos de estudio Fecha: Duración (horas): 2 horas Escenario: Laboratorio de Cómputo • • • • Software requerido: • Equipo necesario en el escenario: Windows 10.0 o Superior Firefox / Chrome / Edge IDE Visual Studio Code Utilizar uno de los siguientes Servidores: o XAMPP o WampServer o Laragon SonarQube https://www.sonarqube.org/ Equipo de Cómputo. Desarrollo práctico 1: Una tienda de artículos deportivos te solicita crear e identificar las vulnerabilidades desde el código fuente de una página web profesional y funcional: La tienda vende sus productos en línea de manera efectiva es un proceso crucial para garantizar la seguridad y el buen funcionamiento de la página web. La creación de la página web comienza con la definición de los objetivos del sitio y la selección de la plataforma adecuada, que debe ser segura, escalable y fácil de usar tanto para los administradores como para los clientes. Es esencial tener en cuenta la usabilidad y la experiencia del usuario para asegurarse de que los visitantes puedan navegar y comprar de manera efectiva. A continuación, te presento una estructura básica para la base de datos: Productos: Esta tabla almacena información sobre los productos que se venden en la tienda en línea. Cada producto tiene un ID único como clave primaria. Los campos incluyen el nombre del producto, una descripción, el precio, la cantidad en stock, la categoría a la que pertenece y una ruta de imagen para mostrar el producto. Dirección de Tecnología Educativa e Integración de Prácticas Página 10 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 1: Clientes: En esta tabla se almacenan los datos de los clientes que compran en la tienda. Cada cliente tiene un ID único como clave primaria. Los campos incluyen el nombre completo del cliente, su dirección de correo electrónico, número de teléfono y dirección de envío. Pedidos: Esta tabla registra los pedidos realizados por los clientes. Cada pedido tiene un ID único como clave primaria. Los campos incluyen la fecha del pedido, el ID del cliente que realizó el pedido, y el estado del pedido. Se utiliza una clave externa para relacionar cada pedido con un cliente en la tabla "Clientes". DetallesPedido: En esta tabla se almacenan los detalles de los productos incluidos en cada pedido. Cada detalle de pedido tiene un ID único como clave primaria. Los campos incluyen el ID del pedido al que está asociado, el ID del producto, la cantidad de productos en el pedido y el precio unitario. Se utilizan claves externas para relacionar cada detalle de pedido con un pedido y un producto específicos. ComentariosReseñas: Aquí se registran los comentarios y reseñas de los productos realizados por los clientes. Cada comentario tiene un ID único como clave primaria. Los campos incluyen el ID del producto al que se refiere el comentario, el ID del cliente que lo hizo, el contenido del comentario, y una calificación. Se utilizan claves externas para relacionar cada comentario con un producto y un cliente específicos. Tabla de Productos: ID_Producto (Clave primaria): Un identificador único para cada producto. Nombre: El nombre del producto. Descripción: Una descripción detallada del producto. Precio: El precio del producto. Stock: La cantidad disponible en el inventario. Categoría: La categoría a la que pertenece el producto (por ejemplo, ropa, calzado, equipos, accesorios). Imagen: Una URL o ruta al archivo de imagen del producto. Tabla de Clientes: ID_Cliente (Clave primaria): Un identificador único para cada cliente. Nombre: El nombre completo del cliente. Correo Electrónico: La dirección de correo electrónico del cliente. Teléfono: El número de teléfono del cliente. Dirección: La dirección de envío del cliente. Tabla de Pedidos: ID_Pedido (Clave primaria): Un identificador único para cada pedido. Fecha: La fecha en que se realizó el pedido. ID_Cliente (Clave externa): Un enlace al cliente que realizó el pedido. Estado: El estado actual del pedido (pendiente, enviado, entregado, etc.). Tabla de Detalles del Pedido: ID_Detalle (Clave primaria): Un identificador único para cada detalle del pedido. ID_Pedido (Clave externa): Un enlace al pedido al que pertenece este detalle. Dirección de Tecnología Educativa e Integración de Prácticas Página 11 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Desarrollo práctico 1: ID_Producto (Clave externa): Un enlace al producto que se ha ordenado. Cantidad: La cantidad de unidades del producto en el pedido. Precio_Unitario: El precio unitario del producto en el momento del pedido. Tabla de Comentarios y Reseñas: ID_Comentario (Clave primaria): Un identificador único para cada comentario. ID_Producto (Clave externa): Un enlace al producto relacionado con el comentario. ID_Cliente (Clave externa): Un enlace al cliente que escribió el comentario. Comentario: El texto del comentario o reseña. Calificación: La calificación otorgada al producto (por ejemplo, en una escala del 1 al 5). Código SQL: CREATE TABLE Productos ( ID_Producto INT PRIMARY KEY, Nombre VARCHAR(255), Descripcion TEXT, Precio DECIMAL(10, 2), Stock INT, Categoria VARCHAR(50), Imagen VARCHAR(255) ); CREATE TABLE Clientes ( ID_Cliente INT PRIMARY KEY, NombreCompleto VARCHAR(255), CorreoElectronico VARCHAR(255), Telefono VARCHAR(20), Direccion VARCHAR(255) ); CREATE TABLE Pedidos ( ID_Pedido INT PRIMARY KEY, Fecha DATE, ID_Cliente INT, Estado VARCHAR(50), FOREIGN KEY (ID_Cliente) REFERENCES Clientes(ID_Cliente) ); CREATE TABLE DetallesPedido ( ID_Detalle INT PRIMARY KEY, ID_Pedido INT, ID_Producto INT, Cantidad INT, PrecioUnitario DECIMAL(10, 2), FOREIGN KEY (ID_Pedido) REFERENCES Pedidos(ID_Pedido), Dirección de Tecnología Educativa e Integración de Prácticas Página 12 de 17 Clave: MST332 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 1: ); FOREIGN KEY (ID_Producto) REFERENCES Productos(ID_Producto) CREATE TABLE ComentariosResenas ( ID_Comentario INT PRIMARY KEY, ID_Producto INT, ID_Cliente INT, Comentario TEXT, Calificacion INT, FOREIGN KEY (ID_Producto) REFERENCES Productos(ID_Producto), FOREIGN KEY (ID_Cliente) REFERENCES Clientes(ID_Cliente) ); Estas sentencias SQL te permitirán crear las tablas en una base de datos que cumpla con la estructura requerida para la tienda de artículos deportivos. Para construir la página web es necesario utilizar un CRUD. CRUD son las siglas de crear, leer, actualizar y borrar (por sus siglas en inglés Create, Read, Update y Delete) y hace referencia a las principales operaciones para interactuar con los registros de una base de datos. Recuerda que un registro es cada entrada o fila en una tabla de la base de datos (por ejemplo, si es una de usuarios, cada usuario es un registro). Veamos cada operación de un CRUD. Por, Primeros pasos con Laravel 10, domina el framework PHP más popular: Aquí continúa tu camino en el desarrollo de aplicaciones web en Laravel + Rest Api y Vue 3 Full Sack. (n.d.). (n.p.): Andres Cruz. Create (Crear): Esta acción hace referencia a la creación o inserción de nuevos registros en nuestra tabla de datos. Read (Leer): Su propósito es consultar registros específicos, o en otro contexto, buscar información. Update (Actualizar): Se refiere a cambiar la información de un registro Delete (Borrar): Su nombre lo dice todo, su función es borrar un registro A continuación, te presento el CRUD de la página propuesta: Crear (Create) - Insertar un nuevo producto en la tabla "Productos": <?php // Conexión a la base de datos (reemplaza los valores con los tuyos) $conexion = new mysqli('nombre_servidor', 'usuario', 'contraseña', 'nombre_base_de_datos'); // Verificar la conexión if ($conexion->connect_error) { die("Error de conexión: " . $conexion->connect_error); } // Datos del nuevo producto $nombre = "Nombre del Producto"; $descripcion = "Descripción del Producto"; $precio = 99.99; Dirección de Tecnología Educativa e Integración de Prácticas Página 13 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 1: $stock = 50; $categoria = "Deportes"; $imagen = "ruta/de/imagen.jpg"; // Consulta SQL para insertar un nuevo producto $sql = "INSERT INTO Productos (Nombre, Descripcion, Precio, Stock, Categoria, Imagen) VALUES ('$nombre', '$descripcion', $precio, $stock, '$categoria', '$imagen')"; if ($conexion->query($sql) === TRUE) { echo "Producto creado exitosamente."; } else { echo "Error al crear el producto: " . $conexion->error; } // Cerrar la conexión a la base de datos $conexion->close(); ?> Leer (Read) - Obtener información de productos: <?php // Conexión a la base de datos $conexion = new mysqli('nombre_servidor', 'usuario', 'contraseña', 'nombre_base_de_datos'); if ($conexion->connect_error) { die("Error de conexión: " . $conexion->connect_error); } // Consulta SQL para obtener todos los productos $sql = "SELECT * FROM Productos"; $resultado = $conexion->query($sql); if ($resultado->num_rows > 0) { while ($fila = $resultado->fetch_assoc()) { echo "ID: " . $fila["ID_Producto"] . " - Nombre: " . $fila["Nombre"] . " - Precio: " . $fila["Precio"] . "<br>"; } } else { echo "No se encontraron productos."; } $conexion->close(); ?> Actualizar (Update) - Modificar un producto existente: Dirección de Tecnología Educativa e Integración de Prácticas Página 14 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 1: <?php // Conexión a la base de datos $conexion = new mysqli('nombre_servidor', 'usuario', 'contraseña', 'nombre_base_de_datos'); if ($conexion->connect_error) { die("Error de conexión: " . $conexion->connect_error); } // Datos actualizados del producto $producto_id = 1; // ID del producto que deseas actualizar $nuevo_precio = 79.99; // Consulta SQL para actualizar el precio del producto $sql = "UPDATE Productos SET Precio = $nuevo_precio WHERE ID_Producto = $producto_id"; if ($conexion->query($sql) === TRUE) { echo "Producto actualizado exitosamente."; } else { echo "Error al actualizar el producto: " . $conexion->error; } $conexion->close(); ?> Eliminar (Delete) - Eliminar un producto: <?php // Conexión a la base de datos $conexion = new mysqli('nombre_servidor', 'usuario', 'contraseña', 'nombre_base_de_datos'); if ($conexion->connect_error) { die("Error de conexión: " . $conexion->connect_error); } // ID del producto que deseas eliminar $producto_id = 1; // Consulta SQL para eliminar un producto $sql = "DELETE FROM Productos WHERE ID_Producto = $producto_id"; if ($conexion->query($sql) === TRUE) { echo "Producto eliminado exitosamente."; } else { echo "Error al eliminar el producto: " . $conexion->error; } Dirección de Tecnología Educativa e Integración de Prácticas Página 15 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Desarrollo práctico 1: $conexion->close(); ?> Con base en lo anterior: 1. Construye la aplicación web utilizando un CRUD. 2. La instalación de SonarQube en Windows se puede hacer con los siguientes pasos. a. Tener Java JDK 11 o posterior. b. MySQL como base de datos (debe estar instalada y configurada previamente). c. Descarga de SonarQube para Windows. d. Descomprime el archivo ZIP descargado en una ubicación de tu elección. Por ejemplo, puedes descomprimirlo en C:\sonarqube. e. Abre una ventana de comandos (CMD) con permisos de administrador. f. Navega al directorio de SonarQube. Por ejemplo: cd C:\sonarqube\bin\windows-x86-64 g. Ejecuta el servicio de SonarQube: i. StartSonar.bat h. Abre un navegador web y accede a la interfaz web de SonarQube en http://localhost:9000. Puedes utilizar la dirección IP de tu servidor si no estás instalando SonarQube en tu máquina local. i. Las credenciales de inicio de sesión por defecto son: i. Usuario: admin ii. Contraseña: admin j. Para detener el servicio de SonarQube, puedes presionar Ctrl + C en la ventana de comandos donde se está ejecutando o simplemente cerrar esa ventana. k. Puedes configurar SonarQube para que se ejecute como un servicio de Windows siguiendo la documentación oficial de SonarQube. Esto te permitirá iniciar y detener SonarQube de manera más conveniente. Resultados obtenidos: SonarQube analiza el código de tu aplicación web en busca de problemas de calidad, como bugs, vulnerabilidades de seguridad, código duplicado, deuda técnica y malas prácticas de programación. Te proporcionará una lista detallada de los problemas posibles que tengas de la codificación. Evidencia de la práctica: (fotografías, videos, archivo, etc.) Informe detallado que incluya una descripción de los pasos que siguió durante la instalación. Debe incluir información sobre el sistema operativo, la versión de SonarQube utilizada y cualquier configuración específica. También debe abordar cualquier problema encontrado y las soluciones aplicadas. informe detallado que incluya una descripción de los pasos que siguió durante la instalación. Debe incluir información sobre el sistema operativo, la versión de SonarQube utilizada y cualquier configuración específica. También debe abordar cualquier problema encontrado y las soluciones aplicadas. Dirección de Tecnología Educativa e Integración de Prácticas Página 16 de 17 Practicario de Seguridad de Sistemas y Aplicaciones Clave: MST332 Conclusiones: ¿Qué desafíos o dificultades encontraste durante la práctica y cómo los abordaste? ¿Qué aprendizajes obtuviste de esta práctica en términos de instalación y uso de SonarQube? ¿Qué aspectos de la instalación o configuración de SonarQube consideras más críticos o relevantes para garantizar su correcto funcionamiento? ¿Cómo crees que SonarQube puede contribuir a mejorar la calidad del código en proyectos de desarrollo de software? ¿Qué medidas adicionales consideras necesarias para asegurar la seguridad y el rendimiento de SonarQube en un entorno de producción? ¿Qué recomendaciones o mejores prácticas aplicarías en futuros proyectos relacionados con el análisis estático de código? Bibliografía: SonarSource. (s.f.). SonarQube: The Leading Product for Code Quality and Security. SonarSource. https://www.sonarsource.com/products/sonarqube/?gads_campaign=SQ-NAPMax&gads_ad_group=Global&gads_keyword=&gclid=EAIaIQobChMIpP9gpvtgQMVxjjUAR2XIwbvEAAYASAAEgJRtfD_BwE Criterios de evaluación: • • Estilo de redacción de la práctica y los resultados obtenidos. Evaluar si el estudiante ha adquirido y comprendido los conceptos teóricos relacionados con la práctica y si puede aplicar ese conocimiento de manera efectiva. Campus: Marina Elaboró: Luis Angel Mares Rosas (Profesor) Revisor: Raúl Ariel Vázquez López (Coordinador Académico) / DSAyTE Vigente a partir del ciclo: 24-2 Última actualización: 14/11/2023 Dirección de Tecnología Educativa e Integración de Prácticas Página 17 de 17