UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69...

213
1 UNIVERSIDAD PERUANA UNIÓN ESCUELA DE POSGRADO UNIDAD DE POSGRADO DE INGENIERÍA UN MODELO PARA EL DESARROLLO DE APLICACIONES WEB SEGURAS Tesis presentada para optar el grado de Magíster en Ingeniería de Sistemas con mención en Ingeniería de Software Por: Abel Ángel Sullón Macalupú LIMA, PERÚ 2014

Transcript of UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69...

Page 1: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

1

UNIVERSIDAD PERUANA UNIÓN

ESCUELA DE POSGRADO

UNIDAD DE POSGRADO DE INGENIERÍA

UN MODELO PARA EL DESARROLLO DE

APLICACIONES WEB SEGURAS

Tesis presentada para optar el grado de Magíster en Ingeniería de

Sistemas con mención en Ingeniería de Software

Por:

Abel Ángel Sullón Macalupú

LIMA, PERÚ

2014

Page 2: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

ii

DEDICATORIA

A mi amada esposa, Milva Gutierrez Quispe, por motivarme

constantemente en la investigación y superación académica.

A mi adorado hijo, Jarib, por su comprensión.

Page 3: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

iii

AGRADECIMIENTOS

A Dios, por haberme conducido en la elaboración de este proyecto.

A mi familia que es el motor de mi vida;

A mi asesor y a todas aquellas personas, quienes contribuyeron con sus aportes

relevantes en el desarrollo de la presente investigación.

Page 4: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

iv

ÍNDICE GENERAL

DEDICATORIA ......................................................................................................... ii

AGRADECIMIENTOS .............................................................................................. iii

ÍNDICE GENERAL .................................................................................................. iv

ÍNDICE DE TABLAS ................................................................................................ ix

ÍNDICE DE FIGURAS ............................................................................................... x

ÍNDICE DE ANEXOS ............................................................................................... xi

RESUMEN ............................................................................................................. xiii

ABSTRACT ........................................................................................................... xiv

CAPÍTULO 1 ..................................................................................................... 1

INTRODUCCIÓN ..................................................................................................... 1

CAPÍTULO 2 ..................................................................................................... 4

REVISIÓN BIBLIOGRÁFICA ................................................................................... 4

2.1 Marco conceptual .................................................................................................... 4

2.1.1 Modelo de procesos del software ................................................................... 4

2.1.2 Taxonomía de la seguridad .............................................................................. 4

2.1.3 Software ........................................................................................................... 7

2.1.4 Ingeniería del software .................................................................................... 7

2.1.5 Software como un servicio (SaaS) .................................................................... 7

2.1.6 Seguridad del software .................................................................................... 8

2.1.7 Aplicaciones web.............................................................................................. 8

2.1.8 Desarrollo web ................................................................................................. 8

2.1.9 Análisis de riesgo .............................................................................................. 9

2.2 Revisión del estado del arte ..................................................................................... 9

2.2.1 Modelos de calidad del software en sintonía con la Seguridad ...................... 9

2.2.2 Modelo de McGraw con la construcción de software seguro ....................... 12

2.2.3 SSE-CMM/ISO 21827, COBIT e ITIL en relación a la seguridad del software . 13

2.2.4 Guía OWASP ................................................................................................... 19

2.2.5 Vulnerabilidades OWASP Top 10 ................................................................... 21

2.2.6 Microsoft SDL ................................................................................................. 23

2.2.7 SDL-Agile ........................................................................................................ 24

2.2.8 Sustainable software security process (S3P) ................................................. 25

2.2.9 Controles de seguridad de ISO 27001 ............................................................ 26

2.3 Procesos ágiles de desarrollo de software ............................................................ 29

2.3.1 Manifiesto ágil ................................................................................................ 29

Page 5: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

v

2.3.2 Marco general MSF-Agile ............................................................................... 30

2.3.3 Artefactos agile UP ......................................................................................... 32

2.3.4 Prácticas XP y TDD .......................................................................................... 33

2.3.5 Prácticas Scrum .............................................................................................. 36

CAPÍTULO 3 ....................................................................................................40

MATERIALES Y MÉTODOS ...................................................................................40

3.1 Lugar de ejecución ................................................................................................. 40

3.2 Equipos y materiales .............................................................................................. 40

3.2.1 Equipos ........................................................................................................... 40

3.2.2 Software ......................................................................................................... 40

3.2.3 Servicios ......................................................................................................... 41

3.2.4 Material bibliográfico ..................................................................................... 41

3.3 Tipo de investigación ............................................................................................. 41

3.4 Indicadores de evaluación de la propuesta ........................................................... 42

3.5 Diagrama de flujo de las actividades de la Investigación....................................... 44

3.6 Cronograma de actividades ................................................................................... 46

3.7 Presupuesto y financiamiento del proyecto de tesis ............................................. 48

CAPÍTULO 4 ....................................................................................................50

CONSTRUCCIÓN DEL MODELO PARA EL DESARROLLO .................................50

DE APLICACIONES WEB SEGURAS ....................................................................50

4.1 Introducción ........................................................................................................... 50

4.2 Diseño gráfico del modelo propuesto .................................................................... 50

4.3 Principios de seguridad .......................................................................................... 51

4.3.1 Defensa en profundidad ................................................................................ 51

4.3.2 Privilegios específicos .................................................................................... 51

4.3.3 Estilo de codificación simple pero robusto .................................................... 51

4.3.4 Seguimiento ................................................................................................... 52

4.4 Backend web seguro .............................................................................................. 52

4.5 Artefactos del backend web seguro ...................................................................... 54

4.5.1 Requisitos del sistema (o requisitos para el módulo backend) ..................... 54

4.5.2 Registro de riesgos de seguridad (amenazas y vulnerabilidades). ................ 54

4.5.3 Registro de componentes de seguridad. ....................................................... 55

4.5.4 Arquitectura de la aplicación ......................................................................... 55

4.5.5 Estándares de desarrollo................................................................................ 55

4.5.6 Método de trabajo del equipo ....................................................................... 56

Page 6: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

vi

4.5.7 Prototipos principales .................................................................................... 56

4.5.8 Diseño del sistema (para la iteración) ............................................................ 57

4.6 Análisis de riegos de seguridad .............................................................................. 57

4.7 Artefactos del análisis de riesgos de seguridad ..................................................... 59

4.8 Implementación de los componentes de seguridad .............................................. 59

4.9 Artefactos de la implementación de los componentes de seguridad ................... 61

4.9.1 Producto funcional seguro ............................................................................. 61

4.10 Demostración y validación de la seguridad ........................................................... 61

4.11 Artefactos de la demostración y validación de la seguridad ................................. 62

4.11.1 Formulario de lecciones aprendidas .............................................................. 62

4.12 Resumen ................................................................................................................ 62

CAPÍTULO 5 ....................................................................................................64

VALIDACIÓN DEL MODELO PROPUESTO ...........................................................64

WSM-DEV – PARTE 1............................................................................................64

5.1 Introducción ........................................................................................................... 64

5.2 Acerca del proyecto ............................................................................................... 64

5.2.1 Grupo InnOp Perú .......................................................................................... 64

5.2.2 Proyecto UPeU-CONCYTEC 2013 ................................................................... 64

5.2.3 Qualpaca 1.0 .................................................................................................. 65

5.2.4 Materiales y métodos .................................................................................... 65

5.3 Backend web seguro y la definición del proyecto Qualpaca ................................. 66

5.4 Análisis de riesgos de seguridad ............................................................................ 67

5.5 Implementación de los componentes de seguridad .............................................. 67

5.5.1 SQL inyection.................................................................................................. 68

5.5.2 Pérdida de autenticación y gestión de sesiones .................................... 68

5.5.3 Secuencia de comandos en sitios cruzados (XSS) ............................... 69

5.5.4 Referencia directa insegura a objetos ..................................................... 69

5.5.5 Configuración de seguridad incorrecta .................................................... 71

5.5.6 Exposición de datos sensibles .................................................................. 72

5.5.7 Ausencia de control de acceso a las funciones ...................................... 73

5.5.8 Falsificación de peticiones en sitios cruzados (CSRF) ......................... 74

5.5.9 Uso de componentes con vulnerabilidades conocidas ......................... 75

5.5.10 Redirecciones y reenvíos no validados .......................................................... 75

5.5.11 Registro de sucesos incompletos ................................................................... 76

5.5.12 Datos incompletos ......................................................................................... 77

Page 7: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

vii

5.5.13 Permisos inconsistentes ................................................................................. 77

5.6 Demostración y validación de la seguridad ........................................................... 81

5.7 Resumen ................................................................................................................ 81

CAPÍTULO 6 ....................................................................................................82

VALIDACIÓN DEL MODELO PROPUESTO ...........................................................82

WSM-DEV – PARTE 2............................................................................................82

6.1 Introducción ........................................................................................................... 82

6.2 Análisis de riegos de seguridad .............................................................................. 82

6.3 Implementación de los componentes de seguridad .............................................. 83

6.4 Demostración y validación de la seguridad ........................................................... 83

6.5 Resumen ................................................................................................................ 84

CAPÍTULO 7 ....................................................................................................85

RESULTADOS Y DISCUSIÓN ...............................................................................85

7.1 Nuevo modelo práctico para desarrollar aplicaciones web seguras en el menor

tiempo. ............................................................................................................................... 85

7.2 Módulo backend de administración y configuración de aplicaciones web tipo SaaS

con Django. ........................................................................................................................ 86

CAPÍTULO 8 ....................................................................................................87

CONCLUSIONES Y RECOMENDACIONES ..........................................................87

8.1 Conclusiones .......................................................................................................... 87

8.2 Recomendaciones .................................................................................................. 88

REFERENCIAS ......................................................................................................90

GLOSARIO .............................................................................................................94

ANEXOS ..........................................................................................................96

Anexo 1 – Matriz de consistencia del proyecto ................................................................. 96

Anexo A1 – Requisitos del sistema .................................................................................... 97

Anexo A2 - Registro de riesgos de seguridad (amenazas y vulnerabilidades) ................... 98

Anexo A3 - Registro de componentes de seguridad .......................................................... 99

Anexo A4 – Arquitectura de la aplicación ........................................................................ 100

Anexo A5 – Estándares de desarrollo .............................................................................. 101

Anexo A6 – Método de trabajo del equipo...................................................................... 102

Anexo A7 – Prototipos principales ................................................................................... 104

Anexo A8 – Diseño del sistema ........................................................................................ 105

Anexo A9 – Formulario de lecciones aprendidas ............................................................. 106

Anexo B1 – Requisitos del Sistema (módulo backend web seguro) ................................ 107

Page 8: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

viii

Anexo B2 - Registro de riesgos de seguridad (amenazas y vulnerabilidades) ................. 109

Anexo B3 - Registro de componentes de seguridad ........................................................ 110

Anexo B4 – Arquitectura de la aplicación ........................................................................ 111

Anexo B5 – Estándares de desarrollo .............................................................................. 112

Anexo B7 – Prototipos principales ................................................................................... 113

Anexo B8 – Diseño del sistema ........................................................................................ 140

Anexo B9 – Formulario de lecciones aprendidas ............................................................. 169

Anexo B10 – Lista de tareas de desarrollo del backend .................................................. 170

Anexo C1 – Product backlog (requisitos del sistema) ...................................................... 172

Anexo C2 - Registro de riesgos de seguridad (amenazas y vulnerabilidades) ................. 174

Anexo C3 - Registro de componentes de seguridad ........................................................ 175

Anexo C4 – Arquitectura de la aplicación ........................................................................ 176

Anexo C5 – Estándares de desarrollo .............................................................................. 177

Anexo C6 – Método de trabajo del equipo ...................................................................... 178

Anexo C7 – Prototipos principales ................................................................................... 180

Anexo C8 – Diseño del sistema ........................................................................................ 182

Anexo C9 – Formulario de lecciones aprendidas ............................................................. 187

Anexo C10 – Acta de constitución del proyecto .............................................................. 188

Anexo C11 – Sprint backlog ............................................................................................. 190

Anexo C12 – Acta de conformidad del servicio o entrega ............................................... 193

Anexo C13 – Manual del usuario ..................................................................................... 194

Page 9: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

ix

ÍNDICE DE TABLAS

Tabla 1 – Taxonomía de requisitos de seguridad con ejemplos ................................ 5

Tabla 2 – Sintonía de la seguridad con los modelos de calidad .............................. 10

Tabla 3 – Seguridad y SSE-CMM ........................................................................... 14

Tabla 4 – Seguridad y COBIT, dominio planear y organizar ................................... 15

Tabla 5 – Seguridad y COBIT, dominio adquirir e implementar ............................... 16

Tabla 6 – Seguridad y COBIT, dominio entrega y soporte ...................................... 16

Tabla 7 – Seguridad e ITIL ..................................................................................... 17

Tabla 8 – Los diez riesgos más importantes en aplicaciones web 2013 ................. 21

Tabla 9 - Indicadores de evaluación para el modelo propuesto .............................. 42

Tabla 10 - Cronograma de actividades ................................................................... 46

Tabla 11 - Presupuesto del proyecto ...................................................................... 48

Tabla 12 - Financiamiento del proyecto .................................................................. 49

Page 10: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

x

ÍNDICE DE FIGURAS

Figura 1 – Aspectos coincidentes entre SSE-CMM, COBIT e ITIL en relación a la

seguridad del software ............................................................................................ 18

Figura 2 – Ciclo de desarrollo seguro de OWASP .................................................. 20

Figura 3 – Modelo de madurez de aseguramiento de software Open SAMM .......... 21

Figura 4 - Vista general del método SDL ............................................................... 24

Figura 5 – Ciclo de vida de SDL-Agile .................................................................... 24

Figura 6 - Vista general del método S3P ................................................................. 25

Figura 7 – Proceso de la norma ISO/IEC 27001:2005 ............................................ 26

Figura 8 – Dominios de la norma ISO/IEC 27001:2005 .......................................... 27

Figura 9 – Proceso de implementación del SGSI utilizando la norma ISO/IEC

27001:2005 en el centro de cómputo de la ONP..................................................... 28

Figura 10 –Principales tareas y actividades de MSF Agile ...................................... 31

Figura 11 – Ciclo de vida Agile-UP ......................................................................... 32

Figura 12 – Flujo para aplicar TDD ......................................................................... 35

Figura 13 – Proceso Scrum .................................................................................... 38

Figura 14 – Esquema de elaboración de la propuesta ............................................ 41

Figura 15 – Diagrama de flujo de las actividades de la investigación ...................... 44

Figura 16 – Diseño del modelo WSM-DEV ............................................................. 50

Figura 17 – Modelo de autorización de usuarios ..................................................... 78

Figura 18 – Modelo de autorización de usuarios de aplicaciones SaaS .................. 79

Page 11: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

xi

ÍNDICE DE ANEXOS

Anexo 1 – Matriz de consistencia del proyecto......................................... 96

Anexo A1 – Requisitos del sistema........................................................... 97

Anexo A2 - Registro de riesgos de seguridad …………………………….. 98

Anexo A3 - Registro de componentes de seguridad ................................ 99

Anexo A4 – Arquitectura de la aplicación ................................................. 100

Anexo A5 – Estándares de desarrollo ..................................................... 101

Anexo A6 – Método de trabajo del equipo ............................................... 102

Anexo A7 – Prototipos principales ........................................................... 104

Anexo A8 – Diseño del sistema ............................................................... 105

Anexo A9 – Formulario de lecciones aprendidas .................................... 106

Anexo B1 – Requisitos del Sistema (módulo backend web seguro) ....... 107

Anexo B2 - Registro de riesgos de seguridad ……………………………... 109

Anexo B3 - Registro de componentes de seguridad ............................... 110

Anexo B4 – Arquitectura de la aplicación ................................................ 111

Anexo B5 – Estándares de desarrollo ..................................................... 112

Anexo B7 – Prototipos principales ........................................................... 113

Anexo B8 – Diseño del sistema ............................................................... 140

Anexo B9 – Formulario de lecciones aprendidas .................................... 169

Anexo B10 – Lista de tareas de desarrollo del backend ......................... 170

Anexo C1 – Product backlog (requisitos del sistema) ............................. 172

Anexo C2 - Registro de riesgos de seguridad …………………………….. 174

Anexo C3 - Registro de componentes de seguridad ................................ 117

Anexo C4 – Arquitectura de la aplicación ................................................ 176

Anexo C5 – Estándares de desarrollo ..................................................... 177

Anexo C6 – Método de trabajo del equipo .............................................. 178

Page 12: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

xii

Anexo C7 – Prototipos principales............................................................. 180

Anexo C8 – Diseño del sistema ................................................................ 182

Anexo C9 – Formulario de lecciones aprendidas .................................... 187

Anexo C10 – Acta de constitución del proyecto........................................ 188

Anexo C11 – Sprint backlog .................................................................... 190

Anexo C12 – Acta de conformidad del servicio o entrega ........................ 193

Anexo C13 – Manual del usuario .............................................................. 194

Page 13: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

xiii

RESUMEN

El propósito de esta investigación es obtener un modelo práctico para el desarrollo

de aplicaciones web seguras y en el menor tiempo, basados en los procesos del

SSE-CMM/ISO 21827, las características de seguridad web de la OWASP 2013 y

experiencias vividas personalmente en el ámbito de la seguridad web. El modelo

propuesto se basa en cuatro principios y cuatro prácticas de seguridad como son: la

implementación preliminar de los componentes de seguridad para cada

vulnerabilidad más recurrentes en aplicaciones web, el análisis de riesgos de

seguridad en torno al negocio, la implementación y pruebas de los componentes de

seguridad para recurrentes o nuevas vulnerabilidades y, la demostración y validación

de la seguridad. El modelo propuesto fue refinado y validado mediante la aplicación

en el Proyecto QUALPACA patrocinado por CONCYTEC y la UPeU, mitigando las

vulnerabilidades al 92.30%, con una velocidad de 20 puntos mensual y una cobertura

del estilo de codificación de un 90%.

Palabras claves: Seguridad web, SSE-CMM/ISO 21827, OWASP, Riesgo de

seguridad, Ataque, Vulnerabilidad.

Page 14: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

xiv

ABSTRACT

The purpose of this research is to obtain a practical model for the development of

secure web applications in the shortest time, based on the processes of SSE-CMM /

ISO 21827, the characteristics of web security OWASP 2013 and experiences in

person at the field of web security. The proposed model is based on four principles

and four security practices such as: preliminary implementation of safety components

for increasingly recurrent vulnerability in web applications, analysis of security risks

around the business, implementation and testing safety components for recurrent or

new vulnerabilities, demonstration and validation of safety. The proposed model was

refined and validated by applying the QUALPACA Project sponsored by CONCYTEC

and UPeU, mitigating the vulnerabilities by 92.30% and a monthly velocity of 20 points

and a coding style coverage of 90%.

Keys words: Web Security, SSE-CMM/ISO 21827, OWASP, Security risk, Attack,

Vulnerability.

Page 15: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

1

1 CAPÍTULO 1

INTRODUCCIÓN

En los últimos años, el interés en la seguridad del software se ha ido

incrementando, surgiendo muchas investigaciones sobre el tema, pero aún falta

lograr la aplicación e implementación de estas investigaciones, lo cual deja abiertos

ámbitos de trabajo en torno al tema (Tovar E y colaboradores, 2006).

Los errores de software representan una constante amenaza para los sistemas

de información, ya que provocan pérdidas incontables en cuanto a la productividad.

La complejidad de los requisitos y el tamaño cada vez mayores de los programas,

aunados a las exigencias de una entrega oportuna en los mercados, han contribuido

al incremento de fallas o vulnerabilidades de software (Laudon K y Laudon J, 2012).

La tendencia marcada de las plataformas de software como un servicio en línea

(SaaS, por sus siglas en inglés) basado en la nube está desplazando a las

plataformas de software tradicionales. En el 2010, las empresas estadounidenses

invirtieron $29 millones de dólares (10 por ciento de la inversión total en software) en

SaaS (BEA National Income and Product Accounts, 2010 y Gartner Group, 2010

citado por Laudon K y Laudon J, 2012).

Siendo la seguridad de software, un aspecto que debe tener en cuenta tantos

mecanismos de seguridad como el diseño de la seguridad que dificulten los ataques

al software, debe ser considerada como una propiedad emergente de un sistema de

software e incorporarse desde el principio (Gasca G, 2006)

Estas vulnerabilidades se incrementan para las aplicaciones web debido al

entorno donde se ejecutan. Para alcanzar una aplicación web segura es necesario

tener fundamentos sólidos y la experiencia para la aplicación de buenas prácticas de

seguridad desde las primeras etapas del ciclo de vida del desarrollo.

Por su parte, los frameworks de programación web tradicionales, y aún los

ágiles solo consideran la seguridad para vulnerabilidades básicas como la protección

de recursos o carpetas del sistema basados en roles, dejando sueltos los problemas

de seguridad más comunes de la web y de la nube, siendo necesaria un modelo

práctico que integre las buenas prácticas de seguridad en componentes de

Page 16: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

2

seguridad, proporcionando un estilo de codificación que muestre el uso de los

componentes de seguridad y otros utilitarios para el trabajo inicial y repetitivo de toda

aplicación web enmarcados en un módulo inicial, comúnmente denominado el

módulo backend, para así contrarrestar los riegos de la información que una

aplicación maneja sobre la Internet. Esta estrategia permite asignar directamente las

tareas de desarrollo que el negocio requiere de modo que resulte simple, de menos

a más y natural para el desarrollador.

El propósito de esta investigación es elaborar un modelo de trabajo práctico

para desarrollar aplicaciones web seguras (menores vulnerabilidades) y en el menor

tiempo basadas en los procesos de la metodología SSE-CMM/ISO 21827, el

Proyecto OWASP y experiencias vividas, proporcionando las plantillas de los

entregables para cada fase del modelo. La implementación de los Componentes de

seguridad se desarrolló para el lenguaje de programación ágil Python, liberándose la

primera versión de un backend de administración de aplicaciones web totalmente

responsivas denominada Backengo (versión actual). Este módulo integra los

recursos de seguridad y otros componentes necesarios para desarrollar una

aplicación web moderna, confiable y en el menor tiempo.

A fin de ilustrar la contribución del modelo propuesto, se presenta el caso de

su aplicación en el Desarrollo del proyecto denominado “Desarrollo de plataforma

tecnológica en la web para la competitividad de la cadena productiva de alpacas en

la región puno (Qualpaca)” patrocinado por el Consejo Nacional de Ciencia,

Tecnología e Innovación del Perú (CONCYTEC) y por la Universidad Peruana Unión

(UPeU) Filial Juliaca. Se determina si el equipo ejecutó el modelo definido

correctamente y en qué medida se mejoró la seguridad de la aplicación.

Con un modelo de trabajo definido para el Desarrollo de Aplicaciones Web

Seguras permitirá al equipo de desarrollo construir aplicaciones confiables y entregar

durante el primer mes funcionalidades importantes del negocio a los clientes junto

con la documentación necesaria del proyecto.

El informe de tesis está compuesta por 8 capítulos: en el capítulo 1, se describe

la problemática, la justificación, el objetivo del trabajo de investigación y la estructura

del documento de tesis. En el capítulo 2, se revisa los antecedentes y se explica

brevemente la teoría de las partes principales de esta tesis. En el Capítulo 3, se

describe el método utilizado y las herramientas para el desarrollo de la presente

investigación. En el Capítulo 4, se diseña y se desarrolla el modelo de seguridad

propuesto. En el Capítulo 5 y 6, se valida el modelo mediante el desarrollo de una

Page 17: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

3

aplicación web tipo SaaS. En el capítulo 7 se presentan y se discuten los resultados

y en el Capítulo 8, se detallan las conclusiones y recomendaciones realizadas al

presente trabajo de investigación.

Page 18: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

4

2 CAPÍTULO 2

REVISIÓN BIBLIOGRÁFICA

En este capítulo se presenta los conceptos relativos a la calidad y seguridad

del software como premisas para la elaboración de la propuesta de esta tesis. Otros

conceptos generales puede revisarse en el Glosario. Seguidamente se revisa las

investigaciones o modelos respecto a la seguridad del software y de aplicaciones

web entre ellos SSE-CMM y OWASP. Finalmente, se explica los métodos ágiles de

desarrollo de software.

2.1 Marco conceptual

2.1.1 Modelo de procesos del software

Según Somerville (2005), un modelo de procesos del software es una

descripción simplificada de un proceso del software que presenta una visión de ese

proceso. Estos modelos pueden incluir actividades que son parte de los procesos y

productos de software y el papel de las personas involucradas en la ingeniería del

software.

2.1.2 Taxonomía de la seguridad

Bashir (citado por Vega V y otros 2006), clasifica el concepto de seguridad en

múltiples dimensiones, entre las que destacan:

Autentificación: Verificar la identificación de los usuarios, es decir, que quien

se está conectando sea quien dice ser.

Control de Acceso: Regulación de los privilegios de los usuarios, que cada

usuario pueda realzar sólo las tareas que le corresponden.

Auditoria: Capacidad de registrar los eventos que afectan al sistema, para que

posteriormente se pueda reconstruir los estados pasados del sistema.

Confidencialidad: Evitar que ciertas entidades no autorizadas puedan acceder

a información confidencial.

Integridad: Que la información no pueda ser modificada mediante

mecanismos no permitidos.

Disponibilidad: Asegurar que el sistema estará disponible cuando el usuario

lo requiera.

Page 19: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

5

No repudiación: Asegurar que alguna entidad que ha participado en una

comunicación, no pueda negar su intervención en ella.

Viega y McGraw (citado por Vega V y otros 2006), plantean los siguientes

objetivos de la seguridad:

Prevención. Siempre se debe anticipar a las posibles fallas de seguridad.

Trazabilidad y Auditoría. Una de las formas de recuperarse de un ataque es

conocer quién fue el atacante, qué hizo y cuándo lo hizo.

Monitoreo. Observar y monitorear constantemente el software en

funcionamiento, que permite detectar intrusiones.

Privacidad y confidencialidad. Mantener en secreto y bien resguardada la

información que maneja el sistema.

Multiniveles de seguridad. No toda la información requiere los mismos niveles

de seguridad, pero manejar esta diferencia no es una tarea difícil.

Administrar el anonimato. Este punto puede ser visto de dos aspectos, en

ocasiones es necesario que se mantenga el anonimato de los usuarios, pero

en otras ocasiones es primordial asegurar que no pueda existir anonimato en

las transacciones del sistema.

Autentificación. Este objetivo, junto a la confiabilidad y la integridad, son

considerados los más importantes. Al autentificación es un aspecto crucial

para la seguridad, dado que permite identificar con certeza quién realiza qué

en un sistema.

Integridad. Esta meta busca controlar los cambios realizados en la

información

Una taxonomía sirve como herramienta de educación y puede usarse como

lista de comprobación para tomar decisiones preventivas de la seguridad. Una

aproximación más completa del concepto de seguridad está dada por la combinación

de cuatro atributos principales: confidencialidad, integridad, disponibilidad y el no

repudio. La tabla 1 muestra una taxonomía de requisitos de seguridad

Tabla 1 – Taxonomía de requisitos de seguridad con ejemplos

Nivel 1 Nivel 2 Ejemplo de requisito de seguridad

No repudio No repudio El sistema debe conocer al cliente

antes de realizar una compra.

Confidencialidad Encriptación Encriptar la contraseña de los

usuarios

Page 20: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

6

Autenticación No se permite retirar dinero de su

cuenta sin que este se haya

identificado.

Agregación No se permite que los cajeros

accedan al registro de ventas diarias.

Atribución El sistema deberá registrar los datos

del usuario y los cambios cada vez

que actualice el registro de notas.

Deberá registrarse los cambios

realizados en el acuerdo

previamente aprobados.

Consentimiento No se permitirá a los médicos del

centro médico a tener acceso a los

informes médicos de un paciente a

menos que el paciente ha aprobado

el acceso

Concurrencia No se permite más de dos

conexiones simultáneos para un

usuario

Seguimiento No se proveerá información a

aquellos usuarios que previamente

han accedido a información de otra

organización del mismo conflicto de

interés.

Integridad Edición La actualización del precio de venta

solo lo hace el contador

Eliminación El sistema no debe permitir la

eliminación de artículos

Validación de datos Aceptar solo datos numéricos

positivos para el precio de venta de

los artículos

Manejo de

excepciones

El sistema no deberá mostrar el

detalle del error al usuario.

Pre-requisitos No se permite al usuario sacar dinero

de su cuenta antes de que el sistema

Page 21: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

7

comprueba la disponibilidad de

fondos

Separación de roles No permitirá que el comprador utilice

la opción de pagos del sistema

Disponibilidad Tiempo de respuesta Se deberá proporcionar la

información del estudiante para el

99% de sus solicitudes

Expiración Reducir el tiempo de solicitud de

conexión para tener tiempo de

espera de 1 minuto cuando el

número de solicitud de conexión es

superior a 10,000 por hora

Asignación de

recursos

El tamaño límite de un archivo debe

ser de 10MB.

Fuente: Calderón M (2007)

2.1.3 Software

Según Pressman (2004), el software es un elemento del sistema que es lógico,

como son las instrucciones (programas) quienes serán el medio de interacción entre

el factor humano y el hardware correspondiente a un sistema de información.

2.1.4 Ingeniería del software

Según Somerville (2005), la ingeniería del software es una disciplina de la

ingeniería que comprende todos los aspectos de la producción del software desde

las etapas iniciales de la especificación del sistema, hasta el mantenimiento de éste

después de que se utiliza. En síntesis, la ingeniería de software no solo está dedicada

al desarrollo del software, sino también hacia diferentes etapas durante su ciclo de

vida.

2.1.5 Software como un servicio (SaaS)

Un software as a service, es un modelo de distribución de software donde el

soporte lógico y los datos que maneja se alojan en servidores de una compañía de

tecnologías de información y comunicación (TIC), a los que se accede vía Internet

desde un cliente. La empresa proveedora TIC se ocupa del servicio de

mantenimiento, de la operación diaria y del soporte del software usado por el cliente.

Regularmente el software puede ser consultado en cualquier computador, se

encuentre presente en la empresa o no. Se deduce que la información, el

Page 22: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

8

procesamiento, los insumos, y los resultados de la lógica de negocio del software,

están hospedados en la compañía de TIC.

2.1.6 Seguridad del software

Tovar E y colaboradores, 2006, afirma que la seguridad del software es una

idea de la Ingeniería de Software que busca que un producto desarrollado continúe

funcionando correctamente ante ataques maliciosos, y puede ser vista como una

medida de robustez de un sistema de software, respecto a una política de seguridad.

Es decir, que la raíz de muchos problemas de seguridad está en que el software falla

de forma inesperada.

La seguridad de un software es una combinación de su capacidad para

asegurar la disponibilidad de la aplicación, la integridad y confidencialidad de los

Datos. De esta forma, una falla del software en proteger cualquiera de esas

características implica una violación de seguridad o vulnerabilidad (M-Tech Identity

Management Suite 2008).

2.1.7 Aplicaciones web

Las aplicaciones web son generalmente vistas en un browser. Una aplicación

tiene 2 partes:

FrontEnd (Browser), es con lo que se encontrará el usuario final, esta interfaz

es el browser. El browser/navegador es clave ya que este nos puede dar la

posibilidad de crear aplicaciones complejas como también restringirnos (Internet

Explorer 6/7). Las aplicaciones deberán estar escritas en

HTML/JS/CSS/AJAX/JQUERY/etc., o Flash/Flex, o Java FX, o Silverlight etc.

BackEnd (Server), es el motor de estas aplicaciones web y casi siempre utilizan

una base de datos para el almacenaje de datos. Los lenguajes de programación son

variados en el backend, si el lenguaje de programación puede generar un script

HTML entonces ya puede ser considerado un lenguaje web. Ejemplos: PHP, MySQL,

XML, JSON, etc.

2.1.8 Desarrollo web

Desarrollo Web es un término utilizado para definir todo el trabajo de creación

de una página web. Desarrollo Web puede abarcar desde una simple página estática

hasta aplicaciones web bastante más complejas, tales como redes sociales como

facebook, páginas de e-commerce como ebay, aplicaciones móviles como google

maps, entre otros.

Page 23: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

9

2.1.9 Análisis de riesgo

El análisis de riesgos, consiste en identificar los riesgos de seguridad en la

organización, determinar su magnitud e identificar las áreas que requieren implantar

salvaguardas (INTECO, 2014).

El análisis de riesgo, tiene como propósito determinar los componentes de un

sistema que requieren protección, sus vulnerabilidades que los debilitan y las

amenazas que lo ponen en peligro, con el fin de valorar su grado de riesgo. El anexo

A2 se muestra un ejemplo de la matriz de riesgos con sus principales características.

El análisis del riesgo, es el uso sistemático de la información para identificar las

fuentes y calcular o evaluar el riesgo (ISO 27001:2005)

Evaluación del riesgo, es el proceso de comparar el riesgo estimado con un

criterio de riesgo dado para determinar la importancia del riesgo (ISO 27001:2005)

Amenaza, es una causa potencial de un incidente no deseado, el cual resulta

en daño a un sistema u organización (ISO 17799:2005)

Vulnerabilidad, es la debilidad de un activo que puede ser explotada por una o

más amenazas (ISO 17799:2005)

Controles (o contramedidas o salvaguardas), son medios para manejar el

riesgo, incluyendo políticas, procedimientos, lineamientos, prácticas o estructuras

organizacionales, las cuales pueden ser administrativas, técnicas, de gestión o de

naturaleza legal (ISO 17799:2005)

2.2 Revisión del estado del arte

2.2.1 Modelos de calidad del software en sintonía con la Seguridad

La calidad es el grado en el que un conjunto de características inherentes

(propio) cumple con los requisitos o expectativa establecida (ISO 9000:2005).

La calidad total no es tan solo realizar las cosas bien hechas sino que es

mejorarlas constantemente, así el aseguramiento de calidad del software viene a ser

el conjunto de actividades de supervisión del desarrollo del software y de su

rendimiento (en distintas oportunidades durante cada fase del ciclo de vida) para

satisfacer los requisitos dados de calidad, siendo el equipo de desarrollo el

responsable por el resultado de calidad del software.

Gasca G, 2006, afirma que los modelos de calidad permiten precisar conceptos

dada la utilidad para planificar y obtener índices de calidad, puesto que ayudan en la

puesta en práctica los conceptos generales por medio de definiciones de tipo

Page 24: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

10

operacional. Considerando los diferentes enfoques de varios modelos de calidad, la

tabla 2 resume las características bajo los parámetros de la seguridad del software

de cada uno de ellos.

Tabla 2 – Sintonía de la seguridad con los modelos de calidad

Modelo de

calidad o

estándar

Dimensión con la seguridad Objetivos de seguridad

Modelo de

McCall

Comprendido por tres ejes, dentro

de los que se encuentra la

operación del producto, para el

cual está establecido el factor

integridad, único factor dentro del

modelo, que superficialmente

toma este concepto de seguridad.

Aunque dentro de sus

objetivos la calidad del

software prima sobre

cualquier otro, la seguridad

del software no se tiene en

cuenta como un factor o

característica de la calidad

que permita asegurar que

dicho modelo contempla de

forma efectiva la seguridad

del software.

Modelo de

Boehm

La principal característica del

modelo es su orientación de la

calidad, sin embargo dentro de los

siete factores definidos la

seguridad está mínimamente

mencionada, pero se resalta la

definición de un factor de la

Facilidad de Pruebas ya que esta

característica es recomendable

como una buena práctica del

desarrollo del software seguro.

Su objetivo está orientado

al desarrollador, sin

embargo dentro de los

factores definidos la

seguridad no se encuentra

mencionada como un factor

de calidad aunque dentro

de las características se

plantea dentro de los

conceptos básicos como

confidencialidad e

integridad

Modelo de

Gilb

Aunque es un modelo orientado a

la calidad industrial, los aspectos

que proponen son pasos amplios

y con cierta flexibilidad para

encontrar su aplicabilidad dentro

El modelo no tiene definido

dentro de sus objetivos y

fines la seguridad del

software de forma

específica, sin embargo;

Page 25: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

11

de la seguridad y aplicarla al

software.

por la generalidad de su

propuesta, los aspectos

definidos permiten enfocar

la seguridad del software.

Paradigma

GQM

La valoración de defectos es uno

de los fines de este modelo, por lo

tanto la seguridad está

involucrada desde una dimensión

posterior a la que se quiere

plantear, la medición dentro de

este paradigma se plantea

posterior a los defectos

producidos.

El paradigma introduce

conceptos y aspectos útiles

sobre la seguridad del

software, sin embargo; esta

característica está siendo

utilizada a posteriori y los

conceptos bajo los cuales

se estudia la seguridad en

este documento, invitan a

contemplar la seguridad en

etapas tempranas de ciclo

de vida de desarrollo de un

producto

Estándar ISO

9126

El modelo define la calidad del

software bajo características

como la funcionalidad dentro de la

cual el concepto de seguridad se

tiene en cuenta como un atributo

importante para impedir acceso

no autorizado, fortuito o

deliberado, a programas y datos;

que aunque no trasciende a los

conceptos de seguridad

relevantes para garantizar un

desarrollo de software seguro, el

estándar involucra la seguridad

dentro de su estructura.

La seguridad del software

está contemplada en el

modelo dentro de las

características de

funcionalidad y la filosofía

del modelo canaliza el

planteamiento de calidad

con una perspectiva de

seguridad más amplia que

los modelos hasta ahora

mencionados, de forma que

este estándar apoya la

implementación de buenas

prácticas dentro del

desarrollo de software

seguro.

Modelo CMM La representación por etapas del

modelo permite tener una

representación continua y flexible

Es un modelo que

suministra a las

organizaciones una

Page 26: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

12

de acercamiento a la mejora de

procesos. Esta representación

organiza las áreas de proceso en

cinco niveles de madurez para

apoyar y guiar el proceso de

mejora; sin embargo

específicamente el manejo de la

seguridad se encuentra

diseminado en todas las etapas y

carece de la profundidad

necesaria para garantizar los

procesos de desarrollo de

software seguro.

orientación eficaz para

establecer el proceso de

mejora de sus programas,

pero dentro de su filosofía;

el aspecto de seguridad

está levemente inmerso

como una sub-

característica de la calidad.

Modelo

SPICE

Contiene una estructura

compuesta por nueve partes y su

filosofía es determinar la

capacidad de los procesos y

mejora de los mismos en el marco

de las características de calidad,

por lo cual la seguridad está

dentro de este concepto, sin

embargo como los demás

modelos, su enfoque no define

dimensiones de seguridad

necesarias para el desarrollo de

software seguro.

El modelo contempla los

procesos de software y

considera las iniciativas de

estandarización existentes

como el caso de CMM,

construido por especialistas

que han trabajado con

métodos y normas

existentes, pero dentro de

su objetivo general; no se

encuentra la seguridad del

software específicamente.

Fuente: Gasca G (2006)

2.2.2 Modelo de McGraw con la construcción de software seguro

McGraw (citado por Vega V y otros 2006), indica que la base de los problemas

de seguridad son la conectividad, la complejidad y la extensibilidad de los sistemas

actuales. La afirmación anterior se refiere a que actualmente la mayoría de los

productos de software están disponibles en un medio tan abierto como internet

(conectividad), y además estos mismos productos son parte de sistemas complejos

que apoyan objetivos de negocios que no son simples ni aislados (complejidad) y que

al mismo tiempo estos objetivos de negocios deben irse adecuando a los constantes

cambios que exigen los mercados actuales (extensibilidad). Como resultado de lo

Page 27: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

13

anterior, los problemas de seguridad del software se han ido incrementando, llegando

en ocasiones, incluso a poner en riesgo el éxito y sobrevivencia de las

organizaciones.

Los aspectos de seguridad en la ingeniería de software, van más allá de la

construcción del producto y trascienden dentro del proceso de software, de ahí que

la preocupación de diferentes organizaciones expresen el interés por crear y

proponer estándares, metodologías y métodos que contemplan la seguridad desde

el punto de vista del proceso y la enmarquen como una característica de calidad del

software importante para su desarrollo, es el caso del planteamiento de la norma ISO

9126, un estándar internacional para la evaluación de la calidad de productos de

software, con el nombre “Information Technology – Software Product Evaluation –

Quality Characteristics and Guidelines for their use”.

Bajo esta misma perspectiva, y teniendo en consideración que los productos

software son parte del inventario de tecnología de la información que las

organizaciones poseen, el presente trabajo analiza el modelo SSE-CMM y OWASP

para determinar un modelo base y las vulnerabilidades existentes para el desarrollo

de aplicaciones web seguras.

2.2.3 SSE-CMM/ISO 21827, COBIT e ITIL en relación a la seguridad del

software

Tovar E y colaboradores, 2006, analizaron los modelos SSE-CMM, COBIT E

ITIL para determinar cómo se enlazan y reafirman las propuestas existentes para el

desarrollo de productos de software seguro.

Systems Security Engineering Capability Maturity Model (SSE-CMM/ISO

21827), es un modelo de referencia para la incorporación de la Ingeniería de

Seguridad en las organizaciones. SSE-CMM divide la ingeniería de seguridad en tres

áreas básicas: riesgo, ingeniería y aseguramiento. La relación de estas áreas con el

objetivo del presente artículo está dada por los siguientes argumentos:

Riesgo, busca identificar y priorizar los peligros asociados al desarrollo de

productos o sistemas.

Ingeniería, trabaja con otras disciplinas para implementar soluciones a los

peligros identificados, en este caso, se relaciona con la Ingeniería de

Software.

Page 28: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

14

Aseguramiento, tiene como objetivo certificar que las soluciones

implementadas son confiables.

El modelo se estructura en dos dimensiones: Dominios y capacidades. Un

dominio es un conjunto de prácticas básicas que definen la ingeniería de seguridad,

mientras que una capacidad se refiere a las prácticas genéricas que determinan la

administración del proceso e institucionalizan la capacidad. Existen veintidós áreas

de proceso que contienen ciento veintinueve prácticas básicas. La tabla 3 destaca

las áreas de procesos que apoyan el desarrollo de software seguro.

Tabla 3 – Seguridad y SSE-CMM

Área de proceso Aporte a la seguridad del software

PA03. Valoración de

riesgos de seguridad

El conocimiento adquirido en esta área de proceso

puede ser utilizado para el desarrollo del análisis de

riesgos que pueden afectar al software, práctica

recomendada para el desarrollo de productos seguros

PA10. Especificar

necesidades de

seguridad

Esta área de proceso puede ser utilizada en la

Ingeniería de Requerimientos de Seguridad, para

determinar los aspectos de seguridad que deben ser

incorporados al nuevo producto

PA11. Verificación y

Validación de la

Seguridad.

Puede utilizarse para la generación de pruebas de

seguridad que deben aplicarse a los productos

software

PA17. Definir el Proceso

de Ingeniería de Sistemas

organizacional.

Aporta en la definición de procesos claros que

incorporan la seguridad en todas las dimensiones

PA18. Mejorar el Proceso

de Ingeniería de Sistemas

organizacional.

SSE-CMM define 5 niveles de madurez, por lo cual, la

mejora de los procesos debe ser continua para

alcanzar el siguiente nivel, lo que puede ser un aporte

en la incorporación gradual de prácticas de desarrollo

de software seguro

Fuente: Tovar E y colaboradores (2006)

Control Objetives for Information and related Technology (COBIT). El objetivo

de este framework es organizar y armonizar distintos estándares internacionales,

relacionados con la administración de la Tecnología de la Información en las

Page 29: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

15

organizaciones. COBIT presenta un conjunto de mejores prácticas, enfocadas en el

control más que en la ejecución, que permiten optimizar la inversión en TI que una

organización realiza. Este modelo define un conjunto de criterios de control, en base

a requisitos de calidad, confianza y seguridad.

Dado que los sistemas de información, y sus productos software asociados,

son parte de los bienes tecnológicos que una organización posee, por lo tanto, existe

una relación y aporte entre la administración de la TI y las propuestas de desarrollo

para software seguro.

Este modelo se organiza en función de cuatro dominios, los que a su vez se

dividen en procesos formados de actividades específicas, que definen los objetivos

de control que una organización debería implementar. Las tablas 4, 5 y 6 (Una por

cada dominio de interés) muestran los procesos específicos a considerar durante la

implementación de software.

Tabla 4 – Seguridad y COBIT, dominio planear y organizar

Área de proceso Aporte a la seguridad del software

PO6. Comunicar las

aspiraciones y

directrices de la

Administración.

Dado que la incorporación de prácticas específicas para

el desarrollo de software seguro debe ser un compromiso

de todo el equipo, este proceso puede ayudar a que la

Administración defina explícitamente políticas de

seguridad y su compromiso con la calidad

PO8. Administrar la

Calidad.

Este conocimiento es un aporte, dado que la seguridad

es un atributo de calidad de los productos software, por lo

cual deben existir estándares de desarrollo que

incorporen los objetivos de seguridad desde etapas

tempranas

PO9. Valoración y

administración de

riesgos.

Es un aporte para la aplicación de la práctica de análisis

de riesgo, recomendada para la seguridad del software

Fuente: Tovar E y colaboradores (2006)

Page 30: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

16

Tabla 5 – Seguridad y COBIT, dominio adquirir e implementar

Área de proceso Aporte a la seguridad del software

AI2. Adquirir y

mantener

aplicaciones

software.

Todo el conocimiento y experiencia de este proceso puede

ser utilizado y complementado con las nuevas propuestas de

desarrollo de software seguro

AI7. Instalación y

acreditación de

soluciones y

cambios.

Relacionado con los procedimientos de aceptación de los

nuevos productos, puede aportar a explicitar las pruebas de

seguridad

Fuente: Tovar E y colaboradores (2006)

Tabla 6 – Seguridad y COBIT, dominio entrega y soporte

Área de proceso Aporte a la seguridad del software

DS2.Administración

de servicios

prestados por

terceros.

Este punto puede ser complementado con normas y

controles explícitos para el momento exteriorizar el

desarrollo de software.

DS5. Garantizar la

seguridad de los

sistemas.

Es muy importante que se declare explícitamente la

preocupación por la seguridad, lo cual es un aporte a todas

las nuevas propuestas de seguridad del software.

DS10.

Administración de

problemas.

Los problemas de fallas de seguridad de software son parte

del conocimiento histórico que todos los desarrolladores de

software de la organización deberían tener a su disposición,

de manera tal, de evitar la repetición de errores cometidos,

en este aspecto, se debe aprovechar este proceso COBIT

Fuente: Tovar E y colaboradores (2006)

Information Technology Infraestructure Library (ITIL), ofrece un marco común

para todas las actividades del departamento TI, como parte de la provisión de

servicios, basado en la infraestructura tecnológica. Estas actividades se dividen en

procesos, que proporcionan un marco eficaz para lograr una Gestión de Servicios de

Tecnologías de la Información más madura. Proporciona una descripción detallada

de una serie de buenas prácticas, a través de una amplia lista de roles, tareas,

Page 31: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

17

procedimientos y responsabilidades que pueden adaptarse a cualquier organización

de TI.

Los procesos que esta librería describe, bajo los cuales muestra que son

requeridos para el manejo eficiente y efectivo de la infraestructura tecnológica,

existen aquellos que velan por la disponibilidad de los activos de información como

requiere la organización y los demás que apoyan y facilitan la gestión de funciones y

actividades de seguridad como el tratamiento y solución de problemas,

implementación de controles y políticas necesarias dentro de la organización. Por lo

tanto la Tabla 7, de forma general, se presentan la relación entre el modelo que

plantea ITIL y los aspectos que se consideran más relacionados con la seguridad,

teniendo en cuenta que ITIL suministra un conjunto extenso y coherente de buenas

prácticas para la dirección del servicio de informática y los procesos relacionados,

promoviendo un enfoque de calidad para conseguir la eficacia de la empresa y la

eficiencia en el uso de TI, por lo tanto dentro de dicha calidad hacia la eficacia se

encuentra contemplada la seguridad.

Tabla 7 – Seguridad e ITIL

Librería Aporte a la seguridad del software

Soporte del Servicio: En

los aspectos

relacionados con la

Gestión de Incidentes y

Gestión de Problemas

Permiten la implementación de controles de

seguridad con el fin de mantener los aspectos

tecnológicos de la organización, lo cual podría ser

adaptado para el desarrollo de software

Provisión del Servicio: En

cuanto a los aspectos de

Gestión de Disponibilidad

y Gestión de Continuidad

de Servicios.

Influyen de forma directa con los objetivos de

seguridad, cuando se definen dentro de la

organización y se asegura la demanda que requiere

el negocio en cuanto a los activos tecnológicos que

tiene y requiere para el desempeño de sus

actividades. Esto es un aporte dado que los

productos software son un activo tecnológico.

Fuente: Tovar E y colaboradores (2006)

Tanto como SSE-CMM, COBIT e ITIL, incorporan la seguridad desde distintas

perspectivas, algunas de las cuales son coincidentes y otras complementarias. A

partir de estas singularidades y similitudes se puede determinar una definición

multidimensional de la seguridad en relación al desarrollo de software.

Page 32: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

18

Tovar E y colaboradores (2006), concluyen que los problemas de seguridad no

se solucionan incorporando mecanismos de protección externos al producto de

software, más bien, para conseguir que un producto de software sea seguro durante

su explotación y vida útil, se deben considerar durante su desarrollo las siguientes

dimensiones:

Proceso utilizado para el desarrollo del producto.

Factores humanos relacionados con las habilidades y conocimientos que

deben poseer los equipos desarrolladores.

Prácticas organizacionales declaradas e instauradas que deben respetarse y

aplicarse, y

Productos obtenidos, para cada uno de los cuales se debe realizar una

rigurosa validación y verificación que cumple con los estándares y requisitos

de seguridad declarados

La figura 1 esquematiza los puntos coincidentes entre los modelos en relación

al desarrollo de software seguro y las dimensiones identificadas.

Figura 1 – Aspectos coincidentes entre SSE-CMM, COBIT e ITIL en relación a

la seguridad del software.

Fuente: Tovar E y colaboradores (2006)

COBIT

ITIL

SSE-CMM

Definición prácticas de

seguridad

Niveles de madurez

Necesidad de

definición

Modelos software

Administración

productos software

Definición explícita

requerimientos de

seguridad

Page 33: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

19

El aspecto coincidente en todos los modelos, es el planteamiento de lo

importante que es que las organizaciones declaren explícitamente los requerimientos

de seguridad que apoyarán el logro de sus objetivos de negocio. Esto debe ir

acompañado de prácticas de seguridad bien definidas, conocidas, respetadas y

aplicadas por todos los integrantes de la organización.

Los modelos COBIT y SSE-CMM definen un conjunto de prácticas que

deberían tenerse en consideración. Este aspecto aporta a la dimensión de Prácticas

Organizacionales definida previamente. Tanto SSE-CMM como COBIT plantean la

necesidad que existan procesos de desarrollo de software que estén claramente

definidos. Este aspecto ayuda a la dimensión Proceso mencionada previamente. Las

organizaciones interesadas en incorporar esta dimensión, deben aplicar las

propuestas existentes respecto al desarrollo de software seguro.

Los modelos COBIT e ITIL, aportan a la dimensión Producto, desde la

perspectiva que ambos definen cómo administrar los productos correspondientes a

TI. La dimensión de Factores Humanos, se ve beneficiada por el modelo SSE-CMM,

donde se presentan una serie de procesos que deberían ser desarrollados en las

organizaciones para incorporar la seguridad, justificando la necesidad de que existan

Ingenieros de Seguridad, que trabajen en conjunto a los otros dominios de la

Ingeniería, en especial con los Ingenieros de Sistemas e Ingenieros de Software.

El modelo SSE-CMM, plantea la existencia de distintos niveles de madurez que

puede alcanzar una organización en relación a sus prácticas de seguridad, aspecto

que influye en las cuatro dimensiones de seguridad planteadas.

2.2.4 Guía OWASP

El proyecto abierto de seguridad en aplicaciones web (OWASP por sus siglas

en inglés) ofrece un punto de partida para identificar riesgos en el desarrollo de

sistemas y asegura que aplicaciones hechas a medida o adquiridas complementen

con COBIT. Los controles de OWASP corresponden a los objetivos COBIT y de la

ISO 17799 (OWASP, 2005).

OWASP ofrece dos publicaciones base: la Guía para construir aplicaciones

Web seguras y OWASP Top 10, así mismo ofrece los software WebGoat basada en

Java diseñada para enseñar lecciones de seguridad en aplicaciones Web a través

de lecciones en las que se simulan vulnerabilidades en un servidor, WebScarab

escrito en Java diseñada para analizar aplicaciones web que se comunica usando

los protocolos HTTP y HTTPS, oLabs Projects, y el .Net Projects. También provee un

conjunto de librerías de seguridad empresariales en Java denominada OWASP

Page 34: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

20

ESAPI, en total para la versión del 2008 provee 49 proyectos de más de 300 páginas

cada una de ellas (OWASP, 2008).

Fernández J. (2006), explica el ciclo de desarrollo de aplicaciones y servicios

Web seguras con OWASP mediante la figura 2.

Figura 2 – Ciclo de desarrollo seguro de OWASP

Fuente: Fernández J (2006)

OWASP se basa en la ISO 17799 y COBIT para diseñar los controles de

seguridad que debe ser incluido en la aplicación, estos requisitos de seguridad los

modela como casos de abuso como se muestra en la figura 4, desligándolo de los

procesos de negocio. Luego se realiza un análisis de riesgos junto a los planes de

pruebas. Luego de diseñar la seguridad se procede a la codificación. Una vez

construida se ejecutan las pruebas y se realiza nuevamente un análisis de riesgos

identificando nuevos problemas de seguridad antes del despliegue.

Por su parte, el modelo abierto de madurez para el aseguramiento del software

(SAMM por sus siglas en inglés) es una guía más de OWASP para integrar la

seguridad en el desarrollo de software. Como modelo de madurez, provee recursos

para evaluar las prácticas de seguridad en software existentes en la organización

entre otros recursos relacionados a la seguridad del software. El modelo SAMM se

muestra en la figura 3.

Page 35: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

21

Figura 3 – Modelo de madurez de aseguramiento de software Open SAMM

Fuente: Open SAMM (2010)

El modelo consta de tres niveles de madurez definidos para cada una de las

doce prácticas de seguridad. Estas definen una amplia variedad de actividades a las

que una organización se puede adherir para reducir los riesgos de seguridad e

incrementar el aseguramiento del Software. Se incluyen detalles adicionales para

medir el desempeño exitoso de las actividades, entender los beneficios del

aseguramiento asociado, estimar los costos de personal y otros costos.

2.2.5 Vulnerabilidades OWASP Top 10

OWASP (2013), publicó las 10 vulnerabilidades más frecuentes de las

aplicaciones y servicios Web, estas se muestran en la tabla 8.

Tabla 8 – Los diez riesgos más importantes en aplicaciones web 2013

Vulnerabilidad Descripción

A1 Inyección Las fallas de inyección, tales como SQL, OS, y LDAP,

ocurren cuando datos no confiables son enviados a un

intérprete como parte de un comando o consulta. Los datos

hostiles del atacante pueden engañar al intérprete en

ejecutar comandos no intencionados o acceder datos no

autorizados.

A2 Pérdida de

autenticación y

gestión de sesiones

Las funciones de la aplicación relacionadas a autenticación

y gestión de sesiones son frecuentemente implementadas

incorrectamente, permitiendo a los atacantes comprometer

contraseñas, llaves, token de sesiones, o explotar otras

fallas de implementación para asumir la identidad de otros

usuarios.

Page 36: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

22

A3 Secuencia de

comandos en sitios

cruzados (XSS)

Las fallas XSS ocurren cada vez que una aplicación toma

datos no confiables y los envía al navegador web sin una

validación y codificación apropiada. XSS permite a los

atacantes ejecutar secuencia de comandos en el navegador

de la víctima los cuales pueden secuestrar las sesiones de

usuario, destruir sitios web, o dirigir al usuario hacia un sitio

malicioso.

A4 Referencia

directa insegura a

objetos

Una referencia directa a objetos ocurre cuando un

desarrollador expone una referencia a un objeto de

implementación interno, tal como un fichero, directorio, o

base de datos. Sin un chequeo de control de acceso u otra

protección, los atacantes pueden manipular estas

referencias para acceder datos no autorizados.

A5 Configuración de

seguridad

incorrecta(defectuosa

configuración de

seguridad, 2010)

Una buena seguridad requiere tener definida e

implementada una configuración segura para la aplicación,

marcos de trabajo, servidor de aplicación, servidor web,

base de datos, y plataforma.

Todas estas configuraciones deben ser definidas,

implementadas, y mantenidas ya que por lo general no son

seguras por defecto. Esto incluye mantener todo el software

actualizado, incluidas las librerías de código utilizadas por la

aplicación.

A6 Exposición de

datos sensibles

(almacenamiento

criptográfico

inseguro, 2010)

Muchas aplicaciones web no protegen adecuadamente los

datos sensibles, tales como tarjetas de crédito y

credenciales de autenticación con mecanismos de cifrado o

hashing. Atacantes pueden modificar o robar tales datos

protegidos inadecuadamente para conducir robos de

identidad, fraudes de tarjeta de crédito u otros crímenes.

A7 Ausencia de

control de acceso a

las funciones (falla de

restricción de acceso

a URL, 2010)

Muchas aplicaciones web verifican los privilegios de acceso

a URLs antes de generar enlaces o botones protegidos. Sin

embargo, las aplicaciones necesitan realizar controles

similares cada vez que estas páginas son accedidas, o los

atacantes podrán falsificar URLs para acceder a estas

páginas igualmente.

A8 Falsificación de

peticiones en sitios

cruzados (CSRF)

Un ataque CSRF obliga al navegador de una víctima

autenticada a enviar una petición HTTP falsificado,

incluyendo la sesión del usuario y cualquier otra información

Page 37: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

23

de autenticación incluida automáticamente, a una aplicación

web vulnerable. Esto permite al atacante forzar al navegador

de la víctima para generar pedidos que la aplicación

vulnerable piensa son peticiones legítimas provenientes de

la víctima.

A9 Uso de

componentes con

vulnerabilidades

conocidas

Algunos componentes tales como las librerías, los

frameworks y otros módulos de software casi siempre

funcionan con todos los privilegios. Si se ataca un

componente vulnerable esto podría facilitar la intrusión en el

servidor o una perdida seria de datos. Las aplicaciones que

utilicen componentes con vulnerabilidades conocidas

debilitan las defensas de la aplicación y permiten ampliar el

rango de posibles ataques e impactos.

A10 Redirecciones y

reenvíos no validados

Las aplicaciones web frecuentemente redirigen y reenvían a

los usuarios hacia otras páginas o sitios web, y utilizan datos

no confiables para determinar la página de destino. Sin una

validación apropiada, los atacantes pueden redirigir a las

víctimas hacia sitios de phishing o malware, o utilizar

reenvíos para acceder páginas no autorizadas.

Fuente: OWASP Top 10 (2013)

2.2.6 Microsoft SDL

El método de Microsoft, denominado Ciclo de Vida de Desarrollo Seguro [SDL]

del 2004, es un proceso para el desarrollo de software que tiene que resistir el ataque

malévolo de un intruso. El proceso consiste de una serie de actividades de seguridad:

El desarrollo de modelo de amenaza durante el diseño de software.

El empleo de instrumentos de exploración de código de análisis estáticos.

Las pruebas de seguridad durante la integración de seguridad.

La revisión final de seguridad por un equipo independiente.

La integración de las medidas de seguridad descritas por el método SDL se

muestra en la Figura 4.

Page 38: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

24

Security training Use security

development

tools &

security best

dev, test

practices

Create

security

documenta

tion an

tools for

product

Prepare

security

response

plan

Security

push

Security

service

and

response

execution

Security

Kickoff

Security

design

best

practices

Security

Architecture

Threat

modeling

Pen

testing

Figura 4 - Vista general del método SDL

Fuente: Ardi S y Shahmehri N (2008)

En este proceso, durante la fase de requerimientos, el equipo de proyecto y el

de seguridad colaboran en la planificación del proceso. En el diseño dividen en fases:

Diseño de la seguridad, la arquitectura de seguridad y el modelado de amenaza. En

la implementación, se aplican los estándares de codificación y pruebas. En la

verificación, incluyen revisiones de código de seguridad, así como la realización de

pruebas de seguridad. En la fase de lanzamiento, el software es sujeto a una

seguridad final y luego estará listo a ser entregado. Según el SDL, después del

despliegue, el equipo debe estar preparado para responder a vulnerabilidades recién

descubiertas en el producto de software. Esto es no siempre una solución aceptada

por organizaciones. SDL recomienda el apoyo de seguridad a la fase de

mantenimiento pero no es claro como este apoyo es realizado y como nuevas

vulnerabilidades son descubiertas y mitigadas. En otras organizaciones requiere el

reemplazo completo del proceso de desarrollo. (Ardi S y Shahmehri N, 2008).

2.2.7 SDL-Agile

A diferencia del SDL clásico, donde todos estos requisitos deben ser

completados antes de que el producto sea liberado, en SDL Agile sólo uno de los

requisitos de cada cubo se debe completar en cada sprint. Esta es la concesión que

SDL Agile hace a los horarios de liberación más corto de los proyectos de desarrollo

Agile. Como se suele decir, no puede caber diez libras de harina en una bolsa de

cinco libras, y los requisitos del cubo son los cinco kilos de más que se ha sacado.

La figura 5 muestra el flujo de de trabajo del método SDL Agile.

The every-sprint requirements Security verification bucket Design review bucket Response planing bucket

Threat model

Use validate request

And so on

Fuzz file inputs

Run AppVerif

And so on

Review crypto design

Privacy review

And so on

Disaster recovery plan

Update response contacts

And so on

Figura 5 – Ciclo de vida de SDL-Agile

Fuente: Microsoft (2011)

Requirements Design Implementation Verification Release Support

Page 39: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

25

Sin embargo, a pesar de que los equipos de producto no son necesarios para

completar todos los requisitos del cubo en cada sprint, eso no significa que se puede

omitir de forma indefinida. De hecho, los equipos tienen que completar cada uno de

los requisitos del cubo por lo menos una vez al año. Además, los equipos se les

prohíbe completar el requisito de mismo cubo en dos carreras en una fila. Por

ejemplo, si el equipo del proyecto X elige para completar un análisis de la superficie

de ataque para satisfacer sus requisitos de verificación de seguridad para su cubo

de marzo de sprint, que no puede completar otro análisis de la superficie de ataque

en abril. Más concretamente, se podría completar otro análisis de la superficie de

ataque en abril si de verdad quería, sin embargo, simplemente no podría satisfacer

su compromiso de SDL.

Aparte de esas dos limitaciones, los equipos son libres de elegir lo que quieren

los requisitos del cubo para completar en cualquier sprint dado. SDL Agile no obliga

a ningún tipo de orden de selección de requerimiento. Este producto ofrece a los

equipos la máxima flexibilidad en la elección de las actividades de seguridad que se

encuentran más útiles.

2.2.8 Sustainable software security process (S3P)

Ardi S y Shahmehri N (2008) desarrollaron el método denominado proceso

sostenible de software seguro [S3P], creando un plug-in para integrar la seguridad

en el proceso de desarrollo de software para el OpenUP/Basic. Este proceso provee

criterios para la identificación de las causas de las vulnerabilidades y técnicas de

mitigación que previenen estas vulnerabilidades. La integración del S3P con el

OpenUP se muestra en la figura 6.

Figura 6 - Vista general del método S3P

Fuente: Ardi S y Shahmehri N (2008)

El S3P consiste en tres pasos principales: comienza con el modelo de

vulnerabilidades basadas en un análisis cuidadoso de vulnerabilidades de software

para identificar las causas. Los resultados de este análisis son usados en el segundo

Page 40: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

26

paso para identificar las técnicas de mitigación que eliminan las causas de las

vulnerabilidades. Las técnicas de mitigación entonces son usadas en el tercer paso

para definir componentes de proceso de desarrollo en forma de actividades para ser

aplicadas en el desarrollo. El S3P mejora el proceso de desarrollo previniendo la

repetición de problemas de seguridad y vulnerabilidades, almacenándolos en una

base de datos de vulnerabilidades que proporciona la información sobre las clases

de vulnerabilidades y tipos de errores generales; el S3P puede ser aplicado en el

proceso OpenUP

2.2.9 Controles de seguridad de ISO 27001

La ISO/IEC 27001 es la única norma internacional auditable que define los

requisitos para un sistema de gestión de la seguridad de la información (SGSI). La

norma se ha concebido para garantizar la selección de controles de seguridad

adecuados y proporcionales. Ello ayuda a proteger los activos de información y

otorga confianza a cualquiera de las partes interesadas, sobre todo a los clientes. La

norma adopta un enfoque por procesos para establecer, implementar, operar,

supervisar, revisar, mantener y mejorar un SGSI (ISO 27001, 2005).

Para la implementación del SGSI, la ISO 27001 adopta la metodología PDCA

mostrado en la figura 7.

Figura 7 – Proceso de la norma ISO/IEC 27001:2005

Fuente: ISO 27001 (2005)

El objetivo de la fase de planificación (Plan) es establecer las políticas,

objetivos, los procedimientos y los controles de seguridad descrito en la ISO/IEC

27001 previo análisis y gestión de riesgos de los activos de información. En fase de

ejecución (Do), básicamente se manejan los recursos asignados para el SGSI para

llevar a cabo la gestión de riesgos y la puesta en marcha los controles de seguridad

de la información seleccionados en la fase de planificación. En fase de monitoreo

(Check), se miden la efectividad y el éxito de los controles implantados para verificar

Page 41: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

27

que se hayan cumplido los requerimientos de seguridad. Por ello, es muy importante

contar con registros e indicadores que provengan de estos controles. En esta fase

también se identifican nuevos riesgos, se evalúa la efectividad de la política, costes

y cambios tecnológicos. La última fase, es la fase de mejora (Act), donde se llevan a

cabo las labores de mantenimiento del sistema. Si durante la fase anterior se ha

detectado algún punto débil, este es el momento de corregirlo o mejorarlo a través

de la implementación de medidas correctoras, preventivas y de mejora identificada

en el SGSI.

Puyo R. (2009), Oficial de seguridad de la Oficina de Normalización Previsional

[ONP] del Perú, afirma que la buena aplicación de la norma requiere una adaptación

a la organización. Consecuentemente, la figura 8 y la figura 9 muestran la adaptación

de la metodología ISO 27001 a la ONP.

Figura 8 – Dominios de la norma ISO/IEC 27001:2005

Fuente: Puyo R. (2009)

Page 42: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

28

Figura 9 – Proceso de implementación del SGSI utilizando la norma ISO/IEC

27001:2005 en el centro de cómputo de la ONP

Fuente: Puyo R. (2009)

La implementación y certificación del SGSI del centro de cómputo de la ONP

basado en la norma ISO/IEC 27001 se llevó a cabo en más de dos años (564 días

útiles): del 07 de enero del 2007 hasta el 09 de febrero del 2009. Un año para la

implementación y operación, un año para el mantenimiento y mejora y más de medio

año para la auditoría interna y el logro de la certificación por parte de la BSI. Se

necesitó el esfuerzo directo de 3 personales de la ONP y 6 consultores, y de la

participación indirecta de 15 personales de la ONP y 14 consultores externos.

Logrando sobre todo un sistema de gestión de seguridad de la información alineado

a los objetivos institucionales. Cabe mencionar que los principales factores de éxito

fueron la disponibilidad del personal de ONP, una rápida acción ante las

observaciones del auditor, el constante compromiso de los responsables directos del

proyecto SGSI, la metodología de implementación personalizada a ONP y la

dedicación de 100% del equipo consultor al proyecto.

Piñero B. (2009), asegura que la serie ISO 27000 reemplaza a la ISO 17799 y

a UNE 71502. Al mismo tiempo define la serie 27000 como sigue:

27000: Definiciones y términos de seguridad de la información

27001: Implantación del SGSI (Certificable) evolución de BS-7799-2 y

equivale a UNE 71502

27002: Transcripción de ISO 17799:2005, catálogo de buenas

prácticas.

27003: Guía de implementación.

Page 43: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

29

27004: Indicadores y métricas.

27005: Gestión y evaluación de riesgos.

2.3 Procesos ágiles de desarrollo de software

Este apartado se describe los métodos de desarrollo ágil de software MSF Agile

las prácticas de la programación extrema (XP, por sus siglas en inglés), las prácticas

del Desarrollo dirigido por pruebas (TDD, por sus siglas en inglés) y los principios,

conceptos y prácticas de Scrum.

2.3.1 Manifiesto ágil

Beck K y Colaboradores (2001), definieron los principios sobre los que se basan

los métodos alternativos, de desarrollo ágil de software en cuatro postulados o

valores, lo que ha quedado denominado como manifiesto ágil:

Individuos e interacciones sobre procesos y herramientas

Software funcionando sobre documentación extensiva

Colaboración con el cliente sobre negociación contractual

Respuesta ante el cambio sobre seguir un plan

Juntamente con estos valores se redactaron los siguientes principios derivados

de estos valores:

Nuestra mayor prioridad es satisfacer al cliente mediante la entrega temprana

y continua de software con valor.

Aceptamos que los requisitos cambien, incluso en etapas tardías del

desarrollo. Los procesos ágiles aprovechan el cambio para proporcionar

ventaja competitiva al cliente.

Entregamos software funcional frecuentemente, entre dos semanas y dos

meses, con preferencia al periodo de tiempo más corto posible.

Los responsables de negocio y los desarrolladores trabajamos juntos de

forma cotidiana durante todo el proyecto.

Los proyectos se desarrollan en torno a individuos motivados. Hay que darles

el entorno y el apoyo que necesitan, y confiarles la ejecución del trabajo.

El método más eficiente y efectivo de comunicar información al equipo de

desarrollo y entre sus miembros es la conversación cara a cara.

El software funcionando es la medida principal de progreso.

Page 44: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

30

Los procesos ágiles promueven el desarrollo sostenible. Los promotores,

desarrolladores y usuarios debemos ser capaces de mantener un ritmo

constante de forma indefinida.

La atención continua a la excelencia técnica y al buen diseño mejora la

agilidad.

La simplicidad, o el arte de maximizar la cantidad de trabajo no realizado, es

esencial.

Las mejores arquitecturas, requisitos y diseños emergen de equipos auto-

organizados.

A intervalos regulares el equipo reflexiona sobre cómo ser más efectivo para a

continuación ajustar y perfeccionar su comportamiento en consecuencia.

2.3.2 Marco general MSF-Agile

Microsoft solution framework (MSF) es la metodología empleada por Microsoft

para el desarrollo de software. Esta es una metodología flexible e interrelacionada

con una serie de conceptos, modelos y prácticas de uso, que controlan la

planificación, el desarrollo y la gestión de proyectos tecnológicos.

MSF se centra en los modelos de proceso y de equipo dejando en un segundo

plano las elecciones tecnológicas. El marco MSF se asienta sobre unos principios

fundamentales que definen la cultura del entorno de desarrollo:

1. Fomentar la comunicación abierta.

2. Trabajar en torno a una visión compartida.

3. Motivar a los integrantes del equipo.

4. Establecer responsabilidades claras y compartidas.

5. Centrar el objetivo en la entrega de valor para el negocio.

6. Permanecer ágiles y esperar al cambio.

7. Invertir en calidad.

8. Aprender de la experiencia.

El MSF es un conjunto integrado y configurable de procesos de desarrollo de

software, principios y prácticas probadas. En el Microsoft Visual Studio 2005 Team

System proporciona por defecto 2 plantillas configurables de la metodología MSF:

MSF for Agile Software Development, MSF for CMMi Process Improvement.

Page 45: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

31

Meier J y Colaboradores (2007), afirman que la plantilla ágil de MSF-Agile

contienen las ideas claves del movimiento ágil de software, junto con los principios y

prácticas de MSF clásico para CMMI. El proceso apoya una estrategia de ingeniería

de software ágil que utiliza múltiples iteraciones y un enfoque basado en escenarios

para la creación de aplicaciones. La plantilla proporciona la automatización y la

orientación necesaria para apoyar a su equipo de desarrollo, incluida la gestión de

configuración, gestión de proyectos, seguimiento de elementos de trabajo, y un portal

del proyecto para la comunicación.

La plantilla de MSF-Agile define un conjunto de tareas a realizar durante las

iteraciones de los roles que intervienen en un ciclo de vida de desarrollo de software

incluyendo analistas de negocio, arquitectos, jefes de proyecto, desarrolladores y

probadores. La figura 10 muestra las principales actividades asociadas a cada una

de las tareas definidas.

Figura 10 –Principales tareas y actividades de MSF-Agile

Fuente: Meier J y Colaboradores (2007)

Page 46: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

32

Cuando se crea un nuevo proyecto de equipo utilizando la plantilla de MSF-

Agile proceso, una página de conceptos delineando la orientación del proceso se

muestra en la ventana principal de Microsoft Visual Studio ®. Este es su punto de

vista inicial en el proceso de MSF-Agile. También puede acceder a esta información

desde la página principal del portal del proyecto.

La configuración de la herramienta va mucho más allá de la descripción del

proceso e incluye los elementos de trabajo (tales como escenarios, calidad del

servicio, las tareas, los insectos, y los riesgos), los informes del proyecto, los roles

(grupos y permisos), y un portal del proyecto. Elementos clave proporcionados por la

plantilla de MSF-Agile incluyen:

Los elementos de trabajo

Grupos y permisos de código fuente

Las áreas y las iteraciones

Informes

Portal

2.3.3 Artefactos agile UP

El proceso unificado ágil (AUP) es un desarrollo de programas basado en el

Proceso Unificado Racional (RUP) de IBM, es decir, el AUP es una versión

simplificada de RUP que incorpora técnicas de desarrollo ágiles. La figura 11

muestra el ciclo de vida del AUP.

Figura 11 – Ciclo de vida Agile UP

Fuente: Scott W. (2005)

AUP mantiene las fases del RUP: Inicio, donde se identifica el alcance inicial

del proyecto, una potencial arquitectura para el sistema, se obtiene financiamiento

para el proyecto y aceptación de los involucrados. Elaboración, donde se prueba la

arquitectura del sistema, se hace un prototipo de arquitectura que elimine los riesgos

Page 47: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

33

técnicos para probar que el proyecto es factible. Construcción, donde se implementa

el software sobre una base incremental la que debe estar relacionada con los

objetivos de los involucrados. Y la transición, donde se valida y se entrega el sistema

en un ambiente de producción.

Sin embargo se han quitado varias disciplinas quedando las disciplinas de:

Modelo, donde se diseñan lo los procesos de negocios de la organización, el dominio

de problema que puede ser abordado por el software, y se identifica una solución

viable. Implementación, donde los diagramas del modelo se transforma en código

ejecutable y se aplican pruebas básicas en unidades particulares de prueba. Prueba,

donde se realiza una evaluación objetiva para asegurar la calidad. Esto incluye

encontrar defectos, validar que el sistema funcione como fue diseñado, y verificar

que los requerimientos estén abordados por las funcionalidades. Despliegue,

donde se planifica la entrega del sistema y se lleva a cabo el plan para que el sistema

esté disponible para los usuarios. Administración de la configuración, donde

se administra el acceso a los artefactos del proyecto. Esto no solo incluye el

seguimiento de las versiones de los artefactos, sino también controlar y administrar

los cambios sobre ellos. Administración del proyecto, donde se dirige las actividades

que forman parte del proyecto. Esto incluye administración de riesgos, dirigir

personas y coordinar personas con sistemas que están fuera del alcance del

proyecto. Y la disciplina del ambiente, donde se facilita todo el entorno que permita

el normal desarrollo del proyecto (Scott W, 2005).

Los artefactos UP que necesita un método ágil son: El diagrama de procesos

del negocio, los diagramas de clases del sistema, el diseño de la base de datos y las

interfaces de usuario.

2.3.4 Prácticas XP y TDD

Palacio J (2005), afirma que el Extreme Programming (XP) surge sobre la

suposición de que es posible desarrollar software de gran calidad a pesar, o incluso

como consecuencia del cambio continuo. Su principal asunción es que con un poco

de planificación, un poco de codificación y unas pocas pruebas se puede decidir si

se está siguiendo un camino acertado o equivocado, evitando así tener que echar

marcha atrás demasiado tarde. Los valores que inspiran XP son:

Comunicación, pone en comunicación directa y continua a clientes y

desarrolladores. El cliente se integra en el equipo para establecer prioridades y

resolver dudas. De esta forma ve el avance día a día, y es posible ajustar la

agenda y las funcionalidades de forma consecuente

Page 48: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

34

Feedback rápido y continuo, una metodología basada en el desarrollo incremental

de pequeñas partes, con entregas y pruebas frecuentes y continuas, proporciona

un flujo de retro-información valioso para detectar los problemas o desviaciones.

o De esta forma fallos se localizan muy pronto.

o La planificación no puede evitar algunos errores, que sólo se evidencian

al desarrollar el sistema.

o La retro-información es la herramienta que permite reajustar la agenda y

los planes.

Simplicidad, consiste en desarrollar sólo el sistema que realmente se necesita.

Implica resolver en cada momento sólo las necesidades actuales. Los costes y la

complejidad de predecir el futuro son muy elevados, y la mejor forma de acertar

es esperar al futuro. Con este principio de simplicidad, junto con la comunicación

y el feedback resulta más fácil conocer las necesidades reales

Coraje, implica saber tomar decisiones difíciles. Reparar un error cuando se

detecta. Mejorar el código siempre que tras el feedback y las sucesivas

iteraciones se manifieste susceptible de mejora. Tratar rápidamente con el cliente

los desajustes de agendas para decidir qué partes y cuándo se van a entregar.

XP no es un modelo de procesos ni un marco de trabajo, sino un conjunto de

12 prácticas que se complementan unas a otras y deben implementarse en un

entorno de desarrollo cuya cultura se base en los cuatro valores citados:

Prácticas de codificación

o Simplicidad de código y de diseño para producir software fácil de

modificar.

o Reingeniería continúa para lograr que el código tenga un diseño óptimo.

o Desarrollar estándares de codificación, para comunicar ideas con claridad

a través del código.

o Desarrollar un vocabulario común, para comunicar las ideas sobre el

código con claridad.

Prácticas de desarrollo

o Adoptar un método de desarrollo basado en las pruebas para asegurar

que el código se comporta según lo esperado.

Page 49: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

35

o Programación por parejas, para incrementar el conocimiento, la

experiencia y las ideas.

o Asumir la propiedad colectiva del código, para que todo el equipo sea

responsable de él.

o Integración continua, para reducir el impacto de la incorporación de

nuevas funcionalidades.

Prácticas de negocio

o Integración de un representante del cliente en el equipo, para encauzar

las cuestiones de negocio del sistema de forma directa, sin retrasos o

pérdidas por intermediación.

o Adoptar el juego de la planificación para centrar en la agenda el trabajo

más importante.

o Entregas regulares y frecuentes para satisfacer la inversión del cliente.

o Ritmo de trabajo sostenible, para terminar la jornada cansado pero no

agotado.

Yepes R y Chavarría R (2010), afirman que para un buen feedback, los equipos

XP requieren buenas prácticas de testing. Estos equipos practican test-driver

development (TDD) en pequeños ciclos en los que primero agregan un test y luego

escriben el código fuente necesario para pasar dicho test. De esta manera los

equipos producen código fuente con cerca del 100% de cobertura. La figura 12 ayuda

a entender estos conceptos.

Figura 12 – Flujo para aplicar TDD

Fuente: Yepes R y Chavarría R (2010)

Page 50: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

36

Los test son ejecutados en forma conjunta. Cuando los desarrolladores liberan

código al repositorio, cada uno de los test deben pasar satisfactoriamente, lo que

significa que los desarrolladores tendrán un feedback inmediato a cerca de cómo

están haciendo su trabajo. Esta comprobación se puede realizarse de forma manual

o automatizada, interesando la segunda en lo que respecta a TDD.

Las pruebas unitarias, son realizadas a un componente individual de software.

Generalmente son dirigidas para probar los método de una clase, buscando exactitud

a la hora de identificar rápidamente cuales instrucciones están fallando en un

escenario determinado. Mientras que las pruebas de integración, son realizadas a

dos o más componentes o a todos los componentes de un software como un todo.

Aunque los test unitarios pueden dar la certeza que cada componente por separado

pueda estar funcionando correctamente, es muy probable que durante la interacción

real con sus dependencias haya problemas que únicamente son detectados con los

test de integración.

Así el análisis de código y pruebas unitarias pueden validar que los cambios de

código mitigan la vulnerabilidad expuesta por el defecto de código identificado

previamente.

2.3.5 Prácticas Scrum

Schwaber K y Sutherland J (2010), autores de Scrum, definen que Scrum se

basa en la teoría de control empírico del proceso, emplea un enfoque iterativo

incremental para optimizar la previsibilidad y controlar los riesgos. Existen tres pilares

que sostienen toda implementación del control empírico de procesos.

El primer pilar es la transparencia, la transparencia garantiza que los aspectos

del proceso que afectan al resultado, son visibles para aquellos que administran dicho

resultado. Estos aspectos no sólo deben ser transparentes, sino también conocidos.

Es decir, cuando alguien que inspecciona un proceso cree que algo está hecho, esto

debe ser equivalente a su definición de "hecho".

El segundo pilar es la inspección, se deben inspeccionar con la frecuencia

suficiente los diversos aspectos del proceso para que puedan detectarse variaciones

inaceptables en el mismo. La frecuencia de inspección debe tener en cuenta que

todos los procesos se cambian por el propio acto de inspección. El dilema se presenta

cuando la frecuencia de inspección requerida excede la tolerancia del proceso a ser

inspeccionado. Afortunadamente, esto parece no aplicar al desarrollo de software. El

otro factor es la habilidad y la diligencia de la gente que inspecciona los resultados

del trabajo.

Page 51: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

37

Y el tercer pilar es la adaptación, si el inspector determina, a través de la

inspección, que uno o más aspectos del proceso están fuera de los límites

aceptables, y que el producto resultante será inaceptable, debe ajustar el proceso o

el material procesado. El ajuste debe realizarse lo más rápidamente posible para

minimizar una desviación mayor.

Hay tres puntos para la inspección y la adaptación en Scrum. La reunión diaria

de Scrum se utiliza para inspeccionar el avance hacia la meta de Sprint, y para hacer

las adaptaciones que optimicen el valor de la jornada de trabajo del día siguiente.

Además, la revisión de sprint y las reuniones de planificación se utilizan para

inspeccionar el progreso hacia el objetivo (la liberación de una versión) y para hacer

las adaptaciones que optimicen el valor del siguiente Sprint. Por último, la

retrospectiva de sprint se utiliza para revisar el sprint pasado y determinar qué

adaptaciones harán el siguiente sprint más productivo, satisfactorio y agradable.

El marco de Scrum se compone de un conjunto de equipos Scrum y sus roles

asociados; así como de bloques de tiempo, artefactos, y reglas.

Los equipos Scrum están diseñados para optimizar la flexibilidad y la

productividad, para lo cual, son auto-gestionados, multifuncionales, y trabajan en

iteraciones. Cada equipo Scrum tiene tres roles: 1) el Scrum master, que es

responsable de asegurar que el proceso es comprendido y seguido, 2) el Propietario

del producto, que es responsable de maximizar el valor del trabajo realizado por el

equipo Scrum, y 3) el equipo, que hace el trabajo. El equipo está formado por

desarrolladores con todos los conocimientos necesarios para convertir los

requerimientos del Propietario del producto en un incremento potencialmente

utilizable del producto al final del sprint.

Scrum emplea bloques de tiempo para crear regularidad. Los elementos de

Scrum basados en bloques de tiempo son: la reunión de planificación de la entrega,

la reunión de planificación del sprint, el sprint, el Scrum diario, la revisión del sprint,

y la retrospectiva del sprint. El corazón de Scrum es un sprint, que es una iteración

de un mes de duración o menos. La duración de cada sprint se mantiene constante

a lo largo de todo el esfuerzo de desarrollo. Todos los sprints utilizan el mismo marco

de referencia de Scrum, y proporcionan un incremento de funcionalidad

potencialmente utilizable al producto final. Cada sprint se inicia inmediatamente

después del anterior.

Scrum emplea cuatro Artefactos principales. El product backlog es una lista

priorizada de todo lo que podría ser necesario en el producto. El sprint backlog es

una lista de tareas para convertir el product backlog correspondiente a un sprint, en

Page 52: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

38

un incremento del producto potencialmente entregable. Un burndown es una medida

del backlog restante a través del tiempo. Un burndown de versión mide el product

backlog restante durante el tiempo correspondiente a una liberación de una versión.

Un sprint burndown mide los elementos restantes del sprint backlog en el transcurso

de un sprint.

Las Reglas sirven de unión para los bloques de tiempo, los roles y los artefactos

de Scrum.

Palacio J (2011), define a Scrum como un método de gestión y control para

complementar la aplicación de otros métodos ágiles como XP que, centrados en

prácticas de tipo técnico, carecen de ellas.

Los principios de Scrum son:

Equipos autogestionados.

Una vez dimensionadas las tareas no es posible agregarles trabajo extra.

Reuniones diarias en las que los miembros del equipo se plantean 3 cuestiones:

o ¿Qué has hecho desde la última revisión?

o ¿Qué obstáculos te impiden cumplir la meta?

o ¿Qué vas a hacer antes de la próxima reunión?

Iteraciones de desarrollo de frecuencia inferior a un mes, al final de las cuales se

presenta el resultado a los externos del equipo de desarrollo, y se realiza una

planificación de la siguiente iteración, guiada por cliente.

La figura 13 muestra el método Scrum y el ciclo de vida de desarrollo ágil de

software.

Figura 13 – Proceso Scrum

Fuente: Palacio J (2011)

Page 53: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

39

Scum denomina “Sprint” a cada iteración de desarrollo y según las

características del proyecto y las circunstancias del sprint puede determinarse una

duración desde una hasta dos meses, aunque no suele ser recomendable hacerlos

de más de un mes. El sprint es el núcleo central que proporciona la base de desarrollo

iterativo e incremental que recibe como entrada la pila de producto (product backlog).

Page 54: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

40

3 CAPÍTULO 3

MATERIALES Y MÉTODOS

En este capítulo se describe los materiales empleados y se explica el proceso

seguido para obtener un modelo de desarrollo web seguro.

3.1 Lugar de ejecución

Esta investigación se realizó en el campus de la Universidad Peruana Unión

Filial Juliaca, del departamento de Puno.

3.2 Equipos y materiales

Los equipos y materiales empleados para la realización de la presente

investigación son:

3.2.1 Equipos

Laptop i5 (incluye windows 7)

3.2.2 Software

Microsoft Word 2010. Redacción de la tesis.

Enterprise Architect 7.x. Diseño de sistemas mediante diagramas UML.

Balsamiq 2.x. Diseño de prototipos de páginas web

Python 2.7.x. Lenguaje de programación ágil

Django 1.5.x. Framework para el desarrollo de aplicaciones web.

SublimeText 2. Editor de código fuente.

Git 2.x. Software para sincronizar repositorio locales.

Jenkins CI. Software de integración continúa.

Nginx 1.4.x. Servidor web para proyectos Django

Firefox 34.0.5 y firebug. Para la ejecución de páginas web y, el análisis

estático del código y depuración de errores respectivamente.

Page 55: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

41

SQLite 3 y MySQL 5. Gestores de base de datos

Bootstrap 2.x. Frontend responsivo para aplicaciones web.

3.2.3 Servicios

Acceso a internet. Para la búsqueda de información y el desarrollo

colaborativo.

Github. Servicio en la nube para la codificación colaborativa

Assembla. Servicio en la nueve para el gerenciamiento del proyecto de

Qualpaca aplicando Scrum.

Impresiones y Fotocopias

3.2.4 Material bibliográfico

Laudon K, Laudon J. 2012. Sistemas de información gerencial. 12° ed.

México: Pearson educación. 640 p. ISBN 978-607-32-0949-6

3.3 Tipo de investigación

La presente investigación es de tipo evaluativa aplicada. Ya que evalúa los

modelos SSE-CMM/ISO-21827 y OWASP. Estos modelos son combinados con

experiencias vividas para obtener un nuevo modelo para desarrollar aplicaciones web

seguras y luego fue aplicado en un proyecto real con la finalidad de refinar el modelo

propuesto y mejorar las buenas prácticas de desarrollo seguro de aplicaciones web.

El esquema de los procesos de la presente investigación se muestra en la

figura 14.

Figura 14 – Esquema de elaboración de la propuesta

Propuesta: Un modelo para Desarrollar Aplicaciones

Web Seguras (WSM-DEV, por sus siglas en inglés)

METODOLOGÍAS BASE DE

SEGURIDAD DEL

SOFTWARE: SSE-

CMM/ISO 21827, OWASP

METODOLOGÍAS DE

PROCESOS

DESARROLLO DE

SOFTWARE: SCRUM,

Agile UP

Page 56: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

42

El agrupamiento de las prácticas de seguridad del modelo propuesto

denominado WSM-DEV, tienen su fundamento en las prácticas de seguridad

(dimensiones y capacidades) del modelo SSE-CMM. La guía OWASP, proporciona

las características básicas de seguridad de una aplicación web; las otras prácticas y

características de seguridad se basan en experiencias vividas en el desarrollo de

aplicaciones web.

Por su parte, la aplicación del modelo WSM-DEV sobre los modelos de

software Scrum, permitieron la refinación de las actividades y artefactos del modelo

propuesto.

3.4 Indicadores de evaluación de la propuesta

Con la finalidad de conocer cualitativamente los resultados de la aplicación del

modelo propuesto (producto), se definen los indicadores de evaluación presentados

en la tabla 9.

Tabla 9. Indicadores de evaluación para el modelo propuesto

# Indicador Descripción Promedio ideal

1 Porcentajes de

vulnerabilidades

controladas.

Numero de vulnerabilidades mitigadas

por el número de vulnerabilidades

identificadas

90%

2 Velocidad del

equipo ágil de

desarrollo.

Cantidad de trabajo realizado en 4

semanas

20 puntos historia

(en la primera

iteración)

3 Porcentaje de

métodos que

cumplen el estilo

de codificación .

Número de métodos que siguen el estilo

de codificación por el total de métodos

de la aplicación

80%

4 Porcentaje de

líneas de código el

que cumplen los

estándares de

codificación.

Número de líneas que siguen el estilo

de codificación por el total de líneas de

la toda la aplicación

70%

5 Porcentaje de

artefactos

desarrollados.

Numero de artefactos desarrollados de

los nueve artefactos del modelo

80%

El promedio ideal puede ser referencial, ya que el nivel de seguridad va

depender también del valor de los activos de información que el negocio requiere

Page 57: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

43

proteger. Sin embargo, toda aplicación debe mitigar las 13 vulnerabilidades de las

aplicaciones web del anexo B2.

El promedio de personas de un equipo ágil son entre 3 y 7 personas promedio.

Los 20 puntos historia del promedio ideal está en función a 3 o 4 personas. Es decir

la velocidad promedio ideal de cada persona debe ser de 4 a 5 puntos al mes (Palacio

J, 2011).

Los indicadores 3 y 4 corresponden a las coberturas de cumplimiento del estilo

de codificación a nivel de métodos y de líneas de código, que comúnmente para la

cobertura aceptable de las pruebas suele ser del 80%. La cobertura de pruebas

puede ser incluida cuando se aplica con el modelo TDD.

Page 58: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

44

3.5 Diagrama de flujo de las actividades de la Investigación

El diagrama de flujo de las actividades de la presente investigación se muestra

en la figura 15.

Figura 15 – Diagrama de flujo de las actividades de la investigación

- Validación de la propuesta

- 6. Revisión final de la tesis

- Definición de la propuesta

Tesis con correcciones

Tesis OK

Propuesta OK Propuesta inválida

-

Documentación de la tesis

-

Organización y planificación de la investigación

Análisis de las metodologías

-

- Análisis de resultados y

elaboración de conclusiones

Page 59: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

45

Luego de la organización y planificación de la investigación, se analizaron las

metodologías resumidas en la figura 14 y se elaboró el modelo de manera que se

integre la seguridad en el proceso de desarrollo de aplicaciones web, y a su vez se

fue documentando la tesis. Una vez definido el modelo, se realizó la validación con

el desarrollo del proyecto Qualpaca como caso de estudio, esta aplicación permitió

refinar los componentes del modelo permitiendo analizar los resultados finales y

formular las conclusiones de la investigación. Una vez terminada la documentación

tanto del modelo como de la tesis; la tesis fue enviada a revisión hasta corregir las

observaciones de los Jurados.

Page 60: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

46

3.6 Cronograma de actividades

El desglose del trabajo realizado, luego de la organización y planificación de la

investigación, se muestra en la Tabla 10.

Tabla 10 - Cronograma de actividades

Fase Actividades

Tiempo (9 meses)

2013-2014

A M J J A S O N D

ANÁLISIS DE METODOLOGÍAS

Organización de bibliografías

Análisis de metodologías de DESARROLLO DE SOFTWARE

Análisis de metodologías de SEGURIDAD DE INFORMACIÓN

Revisión de la seguridad de los frameworks emergentes para los

lenguajes de programación ágiles y tradicionales.

DEFINICIÓN DE LA PROPUESTA

Elaboración de un modelo inicial donde las actividades de

seguridad puedan concretarse juntamente con el modelo de

desarrollo de software.

Documentar las actividades, los roles de cada componente del

modelo

Elaboración de las plantillas de cada componente del modelo de

seguridad propuesta.

Refinar el modelo de seguridad propuesto.

Crear las plantillas de los artefactos de la propuesta.

Refinar las plantillas de los artefactos del modelo de seguridad

propuesto.

Page 61: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

47

VALIDACIÓN DE LA PROPUESTA Y DOCUMENTACIÓN

Elaborar un Backend de administración para un determinado

framework emergente que contengan los componentes de

seguridad especificados en la OWASP siguiendo el modelo

propuesto.

Validación de la propuesta aplicando a la construcción de una

Aplicación Web

Documentación del caso de estudio

Actualización del modelo propuesto

FASE FINAL

Análisis de los resultados y elaboración de conclusiones

Redacción del Documento de la Tesis

Sustentación

Page 62: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

48

3.7 Presupuesto y financiamiento del proyecto de tesis

Tabla 11 - Presupuesto del proyecto

Descripción Unid.Med. Cantidad P.U. SubTotal S/.

MATERIALES Y EQUIPOS 5,000.00

Laptop i5 (incluye Windows 7) Unidad 1 4,500.00 4,500.00

Memoria USB Unidad 1 50.00 50.00

Textos Unidad 5 90.00 450.00

SOFTWARE .00

Python Lic. Libre 1 0.00 0.00

Sublime Text 2 Lic. Libre 1 0.00 0.00

Enterprise Architect 5 Lic. Trial 1 0.00 0.00

Balsamiq Lic. Trial 1 0.00 0.00

Git Lic. Libre 1 0.00 0.00

SERVICIOS DE TERCEROS 1,500.00

Modem + Internet Año 1 1,000.00 1,000.00

Hosting GB 1 0.00 0.00

Impresiones Unidad 500 0.20 100.00

Fotocopias Unidad 2000 0.10 200.00

Empaste Unidad 10 20.00 200.00

SERVICIOS DE CONSULTORÍA 1 15,000.00

Asesor de la tesis RR.HH. 1 1,000.00 1,000.00

Tesista RR.HH. 1 5,000.00 5,000.00

Analista-programador (backend) RR.HH. 1 9,000.00 9,000.00

SERVICIOS DE CONSULTORÍA 2 12,000.00

Dueño del proyecto RR.HH. 1 2,000.00 2,000.00

Jefe del proyecto RR.HH. 1 2,000.00 2,000.00

Analista RR.HH. 1 2,000.00 2,000.00

Programador RR.HH. 3 2,000.00 6,000.00

PAGOS DEL PROCESO DE TESIS 2,380.00

OTROS GASTOS 1,500.00

PASAJES Y VIÁTICOS 1,000.00 1,000.00

Imprevistos 500.00

Total S/. 37,380.00

Page 63: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

49

Tabla 12 - Financiamiento del proyecto

Descripción Importe S/.

Financiamiento propio 19,380.00

Financiamiento UPeU 6,000.00

Financiamiento Grupo InnOp Perú 12,000.00

Total S/. 37,380.00

El rubro de financiamiento propio de la tabla 12, corresponde a los gastos de

la compra de materiales y equipos, más los gastos de servicios de terceros (excepto

el internet) y más los otros gatos como son pasajes y viáticos.

El rubro de financiamiento UPeU de la tabla 12, corresponde a los gastos de

internet más el pago al tesista por ser empleado a tiempo completo de dicha

institución.

El rubro de financiamiento Grupo InnOp Perú de la tabla 12, corresponde a los

gastos de servicios de consultoría que la empresa Grupo InnOp Perú pagó por el

desarrollo de Qualpaca.

Page 64: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

50

4 CAPÍTULO 4

CONSTRUCCIÓN DEL MODELO PARA EL DESARROLLO

DE APLICACIONES WEB SEGURAS

4.1 Introducción

En este capítulo se describe el principal resultado del trabajo de tesis: el modelo

propuesto y sus elementos. Para una rápida identificación del modelo propuesto, en

adelante se denominará por sus siglas en inglés “WSM-DEV” (Web-application

Security Model for Development).

4.2 Diseño gráfico del modelo propuesto

El modelo para el desarrollo de aplicaciones web seguras (WSM-DEV, por sus siglas en inglés), pretende ser un modelo de referencia para incorporar las mejores prácticas de seguridad en el ciclo de vida de desarrollo, con la finalidad de construir aplicaciones web robustas, confiables y en el menor tiempo. Para tal fin WSM-DEV provee las plantillas y recursos para cada uno de sus procesos y artefactos.

Esta estrategia permite asignar directamente el trabajo que el negocio requiere

de modo que resulte simple, de menos a más y natural para el desarrollador. La figura

16 muestra la representación gráfica de los grupos de actividades del modelo

propuesto.

Figura 16 – Diseño del modelo WSM-DEV

Page 65: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

51

El backend web seguro, es el primer módulo que implementa una serie de

controles de seguridad en base a vulnerabilidades recurrentes en toda aplicación web

especificados en estudios internacionales como la OWASP, entre otros estudios y

sobre todo en experiencias probadas. Este módulo indica claramente el estilo de

codificación (principios y prácticas) que el equipo debe seguir para construir el resto

del sistema. De este módulo dependerá el nivel de seguridad de la aplicación así

como el tiempo, los riesgos y el costo del proyecto. Este módulo debe ser construido

siguiendo los pasos 2 al 4 del modelo propuesto WSM-DEV.

El análisis de riesgo de seguridad, es el componente más importante del

modelo WSM-DEV, donde se identifican y se priorizan las amenazas y

vulnerabilidades asociados al desarrollo de la aplicación web para incorporarlos en

las tareas del desarrollo. Aquí se planifica el curso de acción requerido para llevar a

cabo los objetivos de seguridad de una iteración.

El siguiente proceso de WSM-DEV es el proceso de implementación de

controles de seguridad, donde se lleva a cabo las actividades planificadas

anteriormente con el fin de lograr los objetivos definidos. Al finalizar la iteración, se

debe mostrar un producto completamente funcional de acuerdo a las actividades

definidas para la Iteración con un nivel de seguridad de acuerdo a los objetivos de

seguridad de la Iteración.

El último proceso de WSM-DEV es el proceso de demostración y validación de

la seguridad donde se realizan procesos de revisión, validación y medición que

permitan certificar que el Incremento es confiable y las acciones correctivas

necesarias.

4.3 Principios de seguridad

4.3.1 Defensa en profundidad

Proveer a la aplicación más de un punto de defensa; la última línea de defensa

debe darse en el backend de la aplicación web.

4.3.2 Privilegios específicos

Definir perfiles de usuario específicos; los roles o funciones de los usuarios bien

definidas deben establecer claramente el manejo de la aplicación.

4.3.3 Estilo de codificación simple pero robusto

Escribir la cantidad mínima de líneas de código que permita que el sistema

responda frente a fallas, y cumplir con los estándares y prácticas de codificación.

Page 66: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

52

Esto permitirá identificar las vulnerabilidades, aumentar la productividad y la calidad

del código.

4.3.4 Seguimiento

Guardar en bitácoras los sucesos del sistema ocasionados por las acciones de

usuarios e intrusos. Esto permitirá conocer cómo la aplicación está siendo atacada.

A continuación se detallan las prácticas de seguridad de este modelo.

4.4 Backend web seguro

El objetivo del backend web seguro, es elaborar los componentes que toda

aplicación web requiere antes de iniciar con su desarrollo, sobre todo los

componentes de seguridad, así como el estilo de codificación. El objetivo es definir

una línea base en seguridad web para las empresas y profesionales de software que

trabajan en el campo de la seguridad dentro del ciclo de desarrollo.

Proyectos sobre seguridad de software como la OWASP y WASC (Web

Application Security Consortium) definen un conjunto de vulnerabilidades que deben

ser consideradas en la construcción de una aplicación web, algunos de los controles

de seguridad son implementados por los frameworks actuales, pero muchas veces

toma tiempo hacer que funcione y sobre todo deja de lado el estilo de codificación de

la aplicación. Va depender de la flexibilidad de los componentes de seguridad de los

frameworks para extender su funcionalidad a nuevos controles de seguridad que

requiera una aplicación en particular.

Para iniciar el desarrollo de una aplicación, lo mínimo que se necesita es que

estos componentes de seguridad deben estar debidamente implementados, así

como los otros componentes o librerías de utilidad de desarrollo de una aplicación

web.

Las características del backend web seguro a usar o a desarrollar debe

satisfacer las características de la aplicación web a desarrollarse, más no al revés.

Si esto sucede, es necesario definir tareas de personalización al backend.

Por lo general, un Backend web seguro para aplicaciones web tipo SaaS, debe

tener las siguientes características: gestionar de manera rápida y segura a los

usuarios, perfiles, permisos, recursos del sistema, módulos del sistema, menús

dinámicos, empresas, sucursales entre otros parámetros de configuración del

sistema. De modo que los siguientes módulos puedan reutilizar los mismos

componentes de seguridad, mensajería, auditoría, plantillas web, sesiones y tokens

Page 67: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

53

de usuarios, permitiendo incluso extender su funcionalidad para casos particulares.

De este Backend dependerá el nivel de seguridad, modernidad, riesgos, cantidad de

personal, costos y tiempos de un proyecto de software.

Estos requisitos y características del backend, debe definirse en la reunión

Project definition, ya que en esta reunión se valida los objetivos y el trabajo de todo

el proyecto. En esta reunión intervienen el Sponsor del proyecto, el Gerente del

proyecto, el Representante de los clientes, entre otros interesados del proyecto.

El backend web seguro, se puede evidenciar entonces en el Project definition

meeting obteniendo como resultado los requisitos y características del módulo del

backend web seguro.

Entradas

Requisitos del sistema (visión del proyecto)

Herramientas

Project definition meeting

Salidas

Requisitos del sistema para el módulo backend

Registro de riesgos de seguridad (amenazas y vulnerabilidades)

Registro de componentes de seguridad

Arquitectura de la aplicación

Estándares de desarrollo

Método de trabajo del equipo

Prototipos principales

Diseño de clases del sistema o ejemplos de aceptación

Por lo tanto, a partir de los requisitos del sistema, se infieren los requisitos de

seguridad y las pruebas de vulnerabilidad que ayudan a definir el software y se

asignan a componentes de software. Este conjunto de requisitos de software y de

componente de software se convierten en: la arquitectura del software, los diseños

de los componentes de software y los componentes de software. En base a la

Page 68: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

54

arquitectura y los estándares se elaboran los Prototipos principales y el Diseño de

clases de toda la aplicación o al menos de la primera iteración y son usados en la

validación y priorización de los requisitos. En caso de estar usando TDD, basta con

agregar a los requisitos o historias de usuario los Ejemplos de aceptación del usuario.

Para el desarrollo de este backend web seguro, debe seguir los pasos 2 al 4

del modelo WSM-DEV.

4.5 Artefactos del backend web seguro

4.5.1 Requisitos del sistema (o requisitos para el módulo backend)

Los requisitos del sistema (módulo backend), es el listado de requisitos

principales que define la visión de todo el proyecto (o de todo el módulo). Vale señalar

que están incluidos los requisitos de seguridad y expectativas del cliente

debidamente priorizados y estimados. Este listado contiene las siguientes partes:

Nombre del proyecto

Fecha de actualización

Listado de los requisitos con propiedades básicas.

La plantilla para los requisitos del sistema puede verse en el anexo A1.

4.5.2 Registro de riesgos de seguridad (amenazas y vulnerabilidades).

El Registro de riesgos de seguridad (amenazas y vulnerabilidades), es el

listado de amenazas y vulnerabilidades comprometido con la aplicación web. Esta

lista inicial para el backend, puede ser obtenido a partir de guías o normas como la

OWASP, recomendaciones de expertos y experiencias vividas que estén alineados

con el objetivo del proyecto. Este listado contiene las siguientes partes:

Nombre del proyecto

Fecha de actualización

Listado de los riesgos de seguridad con propiedades básicas.

La plantilla para el registro de riesgos de seguridad (amenazas y

vulnerabilidades) del proyecto puede verse en el anexo A2.

Page 69: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

55

4.5.3 Registro de componentes de seguridad.

El registro de componentes de seguridad, es el listado de recursos de

seguridad para contrarrestar las amenazas y vulnerabilidades comprometidas con la

aplicación web. Este listado contiene las siguientes partes:

Nombre del proyecto

Fecha de actualización

Listado de los componentes (o una matriz de componentes con riesgos).

La plantilla para el registro de componentes de seguridad del proyecto puede

verse en el anexo A3.

4.5.4 Arquitectura de la aplicación

La arquitectura de la aplicación es un esquema que muestra las capas de la

aplicación, las interacciones entre las capas basado en una arquitectura estándar y

las tecnologías que se usan para implementar cada capa. Este esquema muestra de

forma holística el nivel de calidad y seguridad de la aplicación. Este documento

consta de:

Información general

Historial de revisiones

Esquema de la arquitectura de la aplicación (cuadro o gráfico)

La plantilla de la Arquitectura de la aplicación puede verse en el anexo A4.

4.5.5 Estándares de desarrollo

El estándar de desarrollo es un documento que indica cómo se debe de

nombrar los diferentes componentes de la aplicación: nombre de las clases, atributos,

métodos, archivos, carpetas, nombre de las tablas y campos, así como nombre de

los diagramas y elementos de diseño del sistema. Todo programador, además del

estándar de desarrollo, debe seguir las técnicas y estilos de desarrollo definidas para

el proyecto. Estas técnicas y estilos se interiorizan a través del backend o de un

ejemplo completo desde el diseño hasta la implementación de un componente y

muestra el orden de las instrucciones o restricciones del programa, código depurado

Page 70: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

56

y las pruebas que todo componente debe cumplir. Un estándar de desarrollo

contiene:

Información general

Historial de revisiones

Términos de definición de identificadores

La plantilla del estándar de desarrollo puede verse en el anexo A5.

4.5.6 Método de trabajo del equipo

El método de trabajo del equipo es un documento que resume el plan del

proyecto con la información necesaria dirigida al equipo de desarrollo. Define las

herramientas y procedimientos para minimizar riesgo, sobre todo riesgos de

seguridad. Este documento contiene las siguientes partes:

Información general

Historial de revisiones

Equipo de trabajo

Herramientas

Desafíos o retos a superar

La plantilla del método de trabajo del equipo puede verse en el anexo A6.

4.5.7 Prototipos principales

Los prototipos principales son las interfaces gráficas del usuario diseñado

mediante una herramienta para prototipos que validan las entradas de los datos, los

procesos de negocio y los reportes esperados por los usuarios y clientes. Los

prototipos principales y Los diagramas de clases de diseño del sistema son los únicos

artefactos que se necesitan para delegar tareas al equipo de desarrollo en un modelo

clásico, estos artefactos son reemplazados por los ejemplos de aceptación para un

modelo ágil. Un prototipo responde:

Proyecto

Módulo

Page 71: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

57

Fecha

Requisito

Imagen de la Interfaz gráfica del usuario

Funcionalidad

Personal que aprueba la interface

La plantilla para un prototipo puede verse en el anexo A7.

4.5.8 Diseño del sistema (para la iteración)

El diseño del sistema o de la iteración es un reporte en HTML de la versión

actual del diseño del sistema y contiene los diagramas de clases de diseño. Un

diseño del sistema indica los componentes del sistema, sus relaciones de

dependencia, las restricciones y reglas de negocio que deben ser probadas y

validadas. El diseño debe relejar los estándares de desarrollo y la arquitectura del

sistema. En un documento formal o sistema de mensajes debe indicarse lo siguiente:

Nombre del proyecto

Historial de revisiones

Actualizaciones importantes

Links de descarga o de consulta

Estructura base del modelo.

La plantilla del diseño del sistema puede verse en el anexo A8.

4.6 Análisis de riegos de seguridad

El objetivo de este grupo de procesos es identificar y priorizar las amenazas y

vulnerabilidades de la aplicación e incorporarlos a los requisitos del sistema o

historias de usuario que se van a implementar en la Iteración. En Scrum, esta

integración se realiza en la primera parte del Sprint planning meeting. Por lo que se

precisa de un experto en seguridad que ayude al Dueños del producto a identificar

los riesgos de seguridad.

Page 72: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

58

Por lo tanto, a partir de los requisitos del sistema, incluyendo los requisitos del

backend, se infieren los nuevos requisitos de seguridad y las pruebas de

vulnerabilidad que ayudan a definir el software y se asignan a componentes de

software. En base a la arquitectura y los estándares se elaboran los prototipos

principales de toda la aplicación o al menos de la primera iteración y son usados en

la validación y priorización de los requisitos.

Una vez identificado los riesgos de seguridad, se procede a definir los

componentes de seguridad para cada amenaza o vulnerabilidad. En Scrum, estas

actividades corresponde a la segunda parte del Sprint planning meeting, al definir las

tareas, relacionados a las historias del product backlog.

Para poder definir la lista de tareas de desarrollo, se debe tener listo el diseño

del sistema para todos los requisitos seleccionados de la Iteración. Cada componente

del diseño del sistema debe estar debidamente documentado las reglas de negocio

y las restricciones de seguridad. El diseño debe reflejar el estándar de desarrollo, las

técnicas o estilo de codificación y la arquitectura de la aplicación.

Las tareas para solucionar los errores y vulnerabilidades de la Iteración anterior

e incluso las observaciones en el diseño de los requisitos seleccionados deben ser

rediseñados y solucionados durante la Iteración en curso.

El grupo de procesos de análisis de riesgos de seguridad se puede evidenciar

entonces en la Iteration planning meeting obteniendo como resultado el registro de

componentes de seguridad.

Entradas

Requisitos del sistema

Registro de riesgos de seguridad (amenazas y vulnerabilidades)

Diseño del sistema (para la iteración)

Herramientas

Iteration planning meeting

Salidas

Entradas actualizadas

Registro de componentes de seguridad

Page 73: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

59

A continuación se describen cada uno de los nuevos artefactos, las plantillas

pueden revisarse en los anexos referidos.

4.7 Artefactos del análisis de riesgos de seguridad

En el análisis de riesgos de seguridad no cuenta con ningún nuevo artefacto.

Las plantillas de los artefactos pueden revisarse en los anexos referidos para los

artefactos del backend web seguro.

4.8 Implementación de los componentes de seguridad

El objetivo de este grupo de procesos es llevar a cabo las tareas de

implementación, por parte del equipo de desarrollo, mediante un seguimiento visible

con el fin de lograr los objetivos de seguridad definidos para dicha iteración;

asimismo, implica tanto la coordinación de personas y recursos, así como el

entrenamiento en seguridad al equipo de desarrollo.

Las tareas de la iteración se enfocan en la codificación y testing de los

componentes de seguridad juntamente con las tareas de dicha iteración, por lo que

es importante contar con herramientas para la revisión y testing de la seguridad y

calidad del software sea manual como automatizado, estas tareas deben estar

soportadas por herramientas de desarrollo colaborativo y métodos adecuados para

su integración. A continuación se presenta las buenas prácticas para un correcto

desempeño colaborativo.

1. Antes de realizar una tarea, obtener el último commit del repositorio remoto,

es decir, actualizar el repositorio local.

2. Realizar la(s) tarea(s) según los estándares y estilos de codificación

establecidos para el proyecto.

3. Antes de subir una tarea al repositorio remoto, volver a actualizar el

repositorio local, resolver los conflictos y errores si los hubiese y

seguidamente, subir las tareas al repositorio remoto. Si se está usando un

sistema de integración continua, verificar que los reportes con la nueva

revisión o commit sigan sin errores y mantengan los indicadores de calidad

establecidos para el proyecto.

4. Comunicar el estado de la tarea según el método de trabajo establecido.

Dos prácticas básicas para los testings son:

Page 74: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

60

1. Filtrar entradas, con el fin de asegurar que los datos de entrada sean

válidos.

2. Escapar salidas, para asegurar que los datos salientes no se

malinterpreten.

Las buenas prácticas para las pruebas de seguridad, dentro de este grupo de

procesos responden a las tareas de:

1. Filtrar entradas

Asegurar que los datos de entrada sean válidos; verificar si los datos cumplen

con ciertas reglas, así como el origen de los datos.

2. Asegurar transacciones

Asegurar que los datos se guarden o no de forma adecuada. En ambos casos,

y en especial cuando falla, el sistema debe responder robustamente.

3. Escapar salidas

Asegurar que los datos de salida no se malinterpreten, es decir codificar o

decodificar caracteres especiales de tal forma que su significado original sea

preservado.

En muchas organizaciones dedicadas a la fabricación de software, estos

componentes son desarrollados por un equipo central, dedicados a la investigación

y mejora de los componentes claves de la aplicación y, a dar soporte y capacitación

al equipo de seguridad de un determinado proyecto sobre el uso adecuado de los

componentes de seguridad y otros utilitarios. El equipo de soporte central, son los

encargados de definir el estilo de codificación para todo el proyecto, pues, frente a

un problema se tiene más de una forma de solucionarlos; pero solo una forma es la

correcta para el proyecto en cuestión.

El grupo de procesos de implementación de los componentes de seguridad se

puede evidenciar en el Security training meeting y por las herramientas de revisión y

validación automatizadas y manuales obteniendo como resultado el Incremento o

producto funcional seguro.

Entradas

Registro de componentes de seguridad

Page 75: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

61

Herramientas

Herramientas de revisión y validación automatizados y manuales

Security training meeting

Salidas

Producto funcional o incremento seguro

A continuación se describen cada uno de los nuevos artefactos, las plantillas

pueden revisarse en los anexos referidos.

4.9 Artefactos de la implementación de los componentes de seguridad

4.9.1 Producto funcional seguro

El producto funcional seguro, es la aplicación funcionando de acuerdo a las

tareas definidas para la iteración o la suma de ellos juntamente con los objetivos de

seguridad.

4.10 Demostración y validación de la seguridad

El objetivo de este grupo de procesos es revisar el cumplimiento de los

objetivos de seguridad del proyecto mediante la presentación de resultados, se

realizan procesos de análisis, revisión y medición que permitan certificar que el

Incremento es confiable y las acciones correctivas necesarias.

Los procesos de análisis, revisión y medición se realizan de forma manual y

automática. Las herramientas de Integración Continua permiten automatizar estos

procesos. Por ejemplo, en un proceso TDD, la cobertura de la pruebas aceptable

promedio es del 80%. Estos parámetros de medición deben ser definidos al inicio del

proceso de desarrollo. Los indicadores que miden la eficacia de este modelo se

muestra en la tabla 9.

Al finalizar una iteración se debe presentar el resultado de la iteración para su

aceptación. Con respecto a la seguridad, se debe hacer pruebas de intrusión con el

fin de encontrar nuevas o recurrentes vulnerabilidades de tal manera que se lleven a

cabo acciones correctivas en la próxima iteración.

El grupo de procesos de demostración y validación de la seguridad se puede

evidenciar mediante las reuniones de revisión de la iteración y herramientas de

validación automatizadas y manuales obteniendo como resultado el registro de

riesgos de seguridad actualizado y las lecciones aprendidas.

Page 76: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

62

Entradas

Registro de riesgos de seguridad

Incremento seguro

Herramientas

Iteration review meeting

Herramientas de validación automatizados y manuales

Salidas

Registro de riesgos de seguridad (vulnerabilidades)

Lecciones aprendidas

A continuación se describen cada uno de los nuevos artefactos, las plantillas

pueden revisarse en los anexos referidos.

4.11 Artefactos de la demostración y validación de la seguridad

4.11.1 Formulario de lecciones aprendidas

El formulario de lecciones aprendidas, es un informe de lo que salió bien o no

durante el desarrollo de la iteración y de las acciones de mejora para la siguiente

iteración. Un formulario de lecciones aprendidas contiene las siguientes partes:

Proyecto:

N° Iteración:

Qué salió bien en la iteración

Qué no salió bien en la iteración

Qué mejoras vamos a implementar en la siguiente iteración

La plantilla del formulario de lecciones aprendidas puede verse en el anexo A9.

4.12 Resumen

El modelo WSM-DEV, plantea claras actividades desde la concepción del

proyecto hasta la entrega del producto funcional soportadas por plantillas

consistentes y simplificadas con el propósito de dar cumplimiento a los procesos de

Page 77: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

63

ingeniería de software, acelerar el desarrollo y obtener una aplicación web más

segura.

Page 78: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

64

5 CAPÍTULO 5

VALIDACIÓN DEL MODELO PROPUESTO

WSM-DEV – PARTE 1

5.1 Introducción

En este capítulo se describe la aplicación y validación de la primera parte del

modelo propuesto WSM-DEV; sobre el backend web seguro. La segunda parte del

modelo se aplica y se valida en el siguiente capítulo.

Para ambas partes se realizan mediante el desarrollo de una aplicación web

para la cadena productiva de alpacas (patrocinado por CONCYTEC y la UPeU en el

año 2013) denominada “Qualpaca” versión 1.0

Con la aplicación y validación de esta primera parte del modelo WSM-DEV se

obtuvo el segundo resultado o aporte del trabajo de tesis: El módulo backend de

administración y configuración de aplicaciones web seguras en la nube escrita en

Django y Bootstrap. Y que también sirve como referencia para la construcción de del

módulo backend con otros framewroks o lenguajes de programación.

5.2 Acerca del proyecto

5.2.1 Grupo InnOp Perú

Grupo InnOp Perú EIRL, es una empresa dedicada a ofrecer consultoría y

servicios a terceras empresas. La consultoría y servicios en ingeniería se realizan

mediante el desarrollo de proyectos a plazo determinado e integrada por

profesionales. Grupo InnOp Perú EIRL es parte ejecutante del proyecto UPeU-

CONCYTEC 2013 denominado “Desarrollo de plataforma tecnológica en la web para

la competitividad de la cadena productiva de alpacas en la región Puno” financiado

por el Consejo Nacional de Ciencia, Tecnología e Innovación del Perú (CONCYTEC)

y por la Universidad Peruana Unión (UPeU)

5.2.2 Proyecto UPeU-CONCYTEC 2013

El proyecto UPeU-CONCYTEC 2013, es un proyecto de investigación

presentado por la Dra. Nélida Gladys Maquera Sosa y la UPeU (Universidad Peruana

Unión) en el año 2013 al CONCYTEC denominado “Desarrollo de plataforma

Page 79: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

65

tecnológica en la web para la competitividad de la cadena productiva de alpacas en

la región Puno”, el cual consta de varios entregables entre ellos la aplicación web

funcional denominada “Qualpaca” versión 1.0.

5.2.3 Qualpaca 1.0

Qualpca 1.0, es el nombre de la plataforma tecnológica en la web para la

competitividad de la cadena productiva de alpaca en cumplimiento al proyecto UPeU-

CONCYTEC 2013.

Qualpaca 1.0, es una aplicación web para la nube que da soporte a los registros

genealógicos y reproductores de alpacas de la región Puno. La versión 1.0 consta de

los siguientes módulos:

1. Selección e identificación de alpaca

2. Empadre y gestación

3. Parición y destete

4. Sanidad

5. Esquila

6. Castración

7. Retiro

Debido al tratado de confidencialidad y con la autorización de la Gerente

General de la empresa Grupo InnOp Perú, parcialmente se pueden ver estos

documentos en los anexos referidos.

5.2.4 Materiales y métodos

Qualpaca versión 1.0 fue desarrollado con tecnologías ágiles como el

framework Django 1.5.x de Python, el gestor de base de datos MySQL 5.x y sobre el

administrador de aplicaciones Backengo 0.1 (backenddj) que a su vez integra el

Bootstrap 2.x. El equipo de desarrollo multidisciplinario estuvo conformado por 5

personas contratadas por la consultora Grupo InnOp Perú. Para el desarrollo del

proyecto se aplicó el método Scrum y para la seguridad el método WSM-DEV.

Por acuerdo de confidencialidad, solo se describe y se muestra parte de los

procesos y resultados del proyecto Qualpaca que han sido autorizados por escrito

por la autora principal Dra. Nélida Gladys Maquera Sosa, Gerente General de la

empresa Grupo InnOp Perú EIRL.

Page 80: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

66

Seguidamente, se describe el proceso de desarrollo del backend web seguro

sobre la cual se desarrolló Qualpaca.

5.3 Backend web seguro y la definición del proyecto Qualpaca

El proyecto Qualpca 1.0, se inició formalmente el 01 de mayo del 2013, donde

solo se sabía a grandes rasgos que se desarrollaría una aplicación web para mejorar

la cadena productiva de alpacas. El sistema tendría que registrar los datos

genealógicos y datos de producción de las alpacas iniciando por todos los

productores de la región Puno.

Después de revisar los procesos de la cadena productiva de alpacas en

diferentes instituciones dedicados a la crianza de alpacas de la región Puno y con la

asesoría del Ing. Eliphas Coeli de la Universidad de Camerino de Italia, se definió la

visión del proyecto.

Seguidamente, se optó por aplicar los métodos Scrum y WSM-DEV, el lenguaje

de programación ágil Python y el framework Django, que para ese entonces solo se

tenía una versión en borrador del WSM-DEV y el principal riesgo era que no se

contaba con un backend web seguro desarrollado sobre Django, lo que hizo que el

inicio del desarrollo se postergara hasta el mes de noviembre del mismo año (seis

meses después). Sin embargo, mientras se esperaba la primera entrega del backend

para Django, se inició a diseñar el sistema.

Los prototipos del sistema se validaron el 14 de junio de 2013 en una reunión

con los representantes de las diferentes instituciones dedicados a la crianza de

alpacas de la región Puno que se llevó a cabo en el auditorio de la Dirección General

de Sistemas (DIGESI) de la UPeU Filial Juliaca. Para el 21 de junio ya se tenía

actualizado el diseño en UML de todo el sistema y desplegado en un servidor privado.

En dicho reporte UML también se indicó la Arquitectura de la aplicación donde cada

componente seguía los estándares de desarrollo previamente definidos. Así mismo,

se llevó a cabo la reunión de Project definition donde se aprobó el acta de constitución

del proyecto. Sin embargo, no podía iniciar el desarrollo mientras no se tenía el

backend de administración que el modelo WSM-DEV requiere.

Para fines de octubre del 2013 se publicó una versión beta del backend para

Django, que permitió iniciar el desarrollo el 04 de noviembre y terminar el 06 de

diciembre.

Page 81: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

67

Para el 04 de noviembre se actualizó todo el diseño según los componentes de

seguridad y utilitarios de backend para Django, y también se actualizó el método de

trabajo del equipo entre otros documentos del proyecto.

5.4 Análisis de riesgos de seguridad

Dado que la aplicación web sería de tipo SaaS, se definió un backend para

administrar los permisos a los módulos y a los datos de diferentes empresas

productoras de fibra de alpaca. La lista de requisitos para el módulo backend web

seguro se muestra en el anexo B1.

La mayoría de los riesgos de seguridad a tener en cuenta en el backend web

seguro fueron tomados de la OWASP Top 10 del año 2013. La otra parte de la lista

de riesgos fue abstraída de experiencias personales vividas en diferentes proyectos

y diferentes frameworks como KumniaPHP, Hibernate, Spring Security, NHibernate,

Spring.Net, Flex, Silverlight, PrimeFace entre otros.

Estas características del backend y la lista base de riesgos, fue presentada,

discutida y validada en la reunión del Project definition. Con esta lista de riesgos de

seguridad se procedió a identificar los componentes de seguridad existentes para el

framework Django y evitar reinventar la rueda. El contenido de ambas listas se

muestra en los anexos B2 y B3.

Identificado los componentes se seguridad se procedió a diseñar estos

componentes y todo el módulo del backend sobre el framework Django, respetando

la arquitectura, los estándares y el estilo de codificación previamente definidos. El

anexo B10 muestra las tareas para el desarrollo del backend.

En la reunión de definición del backend web seguro, asistieron: La Dra. Gladys

Maquera Sosa representando a los Patrocinadores CONCYTEC y UPeU y a las

principales instituciones productoras de fibra de alpaca de la Región Puno. El Scrum

Master Ing. Abel Huanca Torres, y el Equipo Scrum conformado por Angel Sullón

Macalupú, Oscar Mendoza Apaza y Elvis Alí Vilca.

5.5 Implementación de los componentes de seguridad

Gran parte de las tareas de implementación fueron los estilos de cómo se usa

un componente de seguridad de Django y decidir por un estilo de programación que

guiaría el resto del proyecto.

La secuencia de comandos para proteger un activo fue asignada a

componentes con la finalidad de reutilizarlos y así minimizar las líneas de código. La

Page 82: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

68

flexibilidad de algunos componentes permite integrar la seguridad al final del proyecto

como es el caso del componente para proteger los recursos del sistema tomando al

usuario y el lugar donde se encuentra. El registro de componentes de seguridad para

el backend se muestra en el Anexo B3.

A continuación se describen los riesgos y componentes de seguridad para el

backend. Los demos, la documentación y todo el código fuente puede ser revisada

en https://github.com/submitconsulting/backengo

5.5.1 SQL inyection

Los SELECT vulnerables toman los datos de entrada como válidos si pasar por

ningún filtro. OWASP recomienda usar una API que permita parametrizar los datos

de entrada por separado.

Django framework, cuenta con los métodos get, filter, exclude, etc. que

compara cada campo por separado. Por ejemplo:

User.objects.get(username=request.POST.get("username"),

password=request.POST.get("password"))

5.5.2 Pérdida de autenticación y gestión de sesiones

HTTP es un protocolo SIN ESTADO, esto significa que se tiene que usar una

SESSION para mantener el ESTADO para no estar autenticándose en cada pedido

HTTP. OWASP recomienda no exponer la SESSION ID en la red, en el navegador,

los logs, etc, así mismo, recomienda expirar y rotar la sesión y los tokens de

autenticación.

Por su parte, Django cuenta con los métodos login y logout para tales fines.

login(request, authenticate(username=request.POST.get("username"),

password=request.POST.get("password"))

Luego, desde cualquier petición HTTP, se puede acceder al token de

autenticación con:

user = request.user

Y para destruir la sesión:

logout(request)

Page 83: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

69

5.5.3 Secuencia de comandos en sitios cruzados (XSS)

El atacante inyecta en el ingreso de datos secuencia de comandos, por lo

general JavaScript, que explotan el intérprete del navegador web. XSS permite a los

atacantes obtener contraseñas, llaves, token de sesión, redireccionar un usuario

hacia un sitio de malware o phishing. OWASP recomienda validar las entradas de

datos y seguir el estándar anatómico de un HTML (cuerpo, atributos, JavaScript,

CSS, o URL) para ubicar los datos no confiables.

Debido a que muchas aplicaciones requieren aceptar caracteres especiales

como parte de las entradas válidas, una solución óptima es escapar toda salida de

los datos a menos que se declare como dato confiable o sano o seguro (safe)

En Django, todas las salidas de datos son escapadas por defecto

{{ name }}

<input type="text" value="{{name}}">

Y para marcar como dato de salida seguro y quitar la protección XSS, Django

cuenta con el filtro safe:

{{ name|safe }}

5.5.4 Referencia directa insegura a objetos

Esto forma parte de realizar una AUTORIZACIÓN apropiada, junto con

Ausencia de Control de Acceso a las Funciones (5.5.7), los usuarios son capaces de

acceder a recursos y datos sin autorización. Un atacante modifica la URL o el valor

del parámetro que se refiere directamente a un objeto del sistema por otro objeto al

que no tiene acceso. OWASP recomienda comprobar el acceso con la lista de

accesos por cada usuario (identificadores de objeto, nombres de fichero o recursos).

Además de las recomendaciones de la OWASP, para una rápida protección al

acceso a datos se debe generar y comprobar llaves de seguridad combinada con el

valor de parámetro.

El sistema de seguridad avanzado de Django, protege a nivel de permiso las

acciones del usuario. Por ejemplo:

from django.contrib.auth.decorators import permission_required

@permission_required('polls')

def my_view(request):

Page 84: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

70

if request.user.has_perm('polls.can_vote):

...

...

Esto mismo se puede realizar de muchas formas, incluso en las plantillas html,

entre otras ventajas.

Se dio mayor flexibilidad construyendo el componente decorador

@permission_resource_required, el cual identifica la URL actual y valida si el usuario

tiene o no permiso.

from apps.utils.decorators import permission_resource_required

@permission_resource_required

def my_view(request):

...

Con este componente se logra que la protección a los recursos se integre al

término de las tareas de desarrollo.

Para dar seguridad a datos, se diseñó un repositorio para el almacenamiento

temporal de identificadores claves a accesos a información clasificada denominada

UserToken. Por ejemplo, obtener el listado de las sedes de la empresa actual.

from apps.utils.security import UserToken

from apps.space.models import Headquar

headquar_list = Headquar.objects.filter(enterprise_id=UserToken.get_enterprise_id(request.session)).order_by("-id")

El otro componente de seguridad que da mayor seguridad es el componente

SecurityKey, que genera una llave de seguridad y la combina con el identificador de

los datos solicitados para luego validar la llave con la acción asociada.

Primero, en el tamplate se invoca al filtro key del templatetag app_security:

{% load app_security %}

<a href="{% url 'locality_delete' d.id|key:'locality_del' %}" ...

Page 85: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

71

Y finalmente, al enviar la petición de eliminar; descifra el id del objeto a partir

de la llave recibida:

from apps.utils.security import SecurityKey

from django.core.exceptions import PermissionDenied

from apps.params.models import Locality

from django.shortcuts import get_object_or_404

def locality_delete(request, key):

id = SecurityKey.is_valid_key(request, key, "locality_del")

if not id:

raise PermissionDenied

try:

d = get_object_or_404(Locality, id=id)

d.delete()

except:

...

5.5.5 Configuración de seguridad incorrecta

Ocasionado por descuidos, desconocimientos y confianza ciega en el entorno

de producción. Las claves de seguridad son los mismos del entorno de desarrollo,

los archivos de ejemplos y URL conocidos están expuestos al público, la aplicación

muestra el detalle completo de los errores. Por suerte, los nuevos frameworks

permiten configurar estos parámetros de forma simple. OWASP recomienda usar

diferentes contraseñas para los entornos de Desarrollo, Aseguramiento de la calidad

(QA) y Producción. Una fuerte arquitectura de la aplicación que proporcione una

separación segura y efectiva entre los componentes. Y realizar auditorías

periódicamente para ayudar a detectar fallos de configuración.

Además de las recomendaciones de la OWASP, la configuración del entorno

de producción se debe instalar las dependencias necesarias, dejando fuera

herramientas de integración, depuración, pruebas entre otros. Esta práctica,

incrementa el tiempo de respuesta de las peticiones HTTP.

Django provee un archivo de configuración que maneja toda la aplicación

comúnmente denominado settings.py cuyas variables de configuración más

importantes son:

# SECURITY WARNING: keep the secret key used in production secret!

SECRET_KEY = '#zqk3o8k!^3j)5g5r=rlt#xz@km+a7f5og$9(&_$69v@4^%4uh'

Page 86: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

72

# SECURITY WARNING: don't run with debug turned on in production!

DEBUG = True #False

TEMPLATE_DEBUG = DEBUG

ALLOWED_HOSTS = ['*',]

DEBUG = True, indica un entorno de desarrollo donde Django muestra los

errores al detalle, si es False y si no se ha personalizado los errores, envía la página

de error 404. Esta variable puede ser usada para que los archivos estáticos de

terceros puedan ser llamados desde el servidor local o de un CNS. Por ejemplo, para

usar JQuery con un CDN sería:

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

Esta práctica, incrementa la velocidad de carga.

5.5.6 Exposición de datos sensibles

Ocurre cuando no se cifran adecuadamente los datos sensitivos o cuando no

se identifican todos los lugares donde estos datos son almacenados.

También ocurre cuando una aplicación almacena archivos cifrados pero la

clave de cifrado es accesible. Por ejemplo el valor de la variable SECRET_KEY de

item anterior. Esta vulnerabilidad queda fuera del alcance de la OWASP. Sin embargo

recomienda aplicar algoritmos de cifrado fuertes y estándar así como claves fuertes

y gestionarlas de forma segura. Y finalmente, deshabilitar el autocompletar en los

formularios de recolectan datos sensibles.

Por suerte, Django mapea las URLs de la aplicación que son expuestos al

público, por lo tanto el archivo settings.py no se accede a través de una URL.

Python usa la librería hashlib para encriptar y desencriptar cadenas. Por

ejemplo:

import uuid

import hashlib

def hash_password(password):

# uuid is used to generate a random number

salt = uuid.uuid4().hex

return hashlib.sha256(salt.encode() + password.encode()).hexdigest() + ':' + salt

Page 87: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

73

def check_password(hashed_password, user_password):

password, salt = hashed_password.split(':')

return password == hashlib.sha256(salt.encode() + user_password.encode()).hexdigest()

new_pass = raw_input('Please enter a password: ')

hashed_password = hash_password(new_pass)

print('The string to store in the db is: ' + hashed_password)

old_pass = raw_input('Now please enter the password again to check: ')

if check_password(hashed_password, old_pass):

print('You entered the right password')

else:

print('I am sorry but the password does not match')

Para el backend, solo se necesitó cifrar el password del usuario, y se aplicó el

componente set_password de Django, por ejemplo:

request.user.set_password(request.POST.get("password"))

Y para validar la autenticación, se usó el componente authenticate de Django:

from django.contrib.auth import authenticate, login, logout

if authenticate(username= request.POST.get("username "), password= request.POST.get("password")):

...

5.5.7 Ausencia de control de acceso a las funciones

Esto forma parte de realizar una AUTORIZACIÓN apropiada, junto con

Referencia directa Insegura a objetos (5.5.4), los usuarios son capaces de acceder a

recursos y datos sin autorización. Un atacante modifica la URL o el valor del

parámetro de una función con privilegios. Las recomendaciones del OWASP y los

componentes de seguridad son los mismos de la sección 5.5.4.

Page 88: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

74

5.5.8 Falsificación de peticiones en sitios cruzados (CSRF)

Al igual que XSS, el atacante no necesariamente inyecta código en el envío de

datos, sino que manipulan el contenido de los datos de los parámetros de la URL

para realizar transacciones fraudulentas con o sin intención del usuario. Más aún,

estos datos pueden provenir de URLs maliciosos. OWASP recomienda la inclusión

de un token no predecible (secreto) en cada solicitud HTTP. Estos tokens deben ser,

como mínimo, únicos para cada sesión del usuario.

Django genera automáticamente un token secreto para cada sesión del usuario

y por defecto son validados en cada solicitud HTTP; es decir en cada acción o

método:

Para peticiones con formularios:

<form action="… >

{% csrf_token %}

</form>

Para peticiones asíncronas con Ajax:

$.ajaxSetup({

beforeSend: function(xhr, settings) {

if(settings.type == "POST"){

xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));

}

}

});

Para peticiones asíncronas con AngularJS:

angular.module('app', ['ngResource', 'ngRoute', 'ngCookies']).run(function ($http, $cookies) {

$http.defaults.headers.common['X-CSRFToken']= $cookies['csrftoken'];

});

Para desproteger CSRF:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt

def func_index(request):

"""

"""

Page 89: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

75

5.5.9 Uso de componentes con vulnerabilidades conocidas

Algunos componentes de software (o frameworks de programación) son

vulnerables ante ataques conocidos, por ejemplo las vulnerabilidades Top 10 de

OWASP, entre otras vulnerabilidades. OWASP recomienda no usar componentes

que no ha codificado. Pero eso no es realista, por lo que todo proyecto de software

debería tener un proceso para identificar y revisar la seguridad de los componentes

que están usando, todo ello bajo políticas de seguridad que regulen el uso de

componentes.

5.5.10 Redirecciones y reenvíos no validados

Las redirecciones o reenvíos con parámetros hacia otras páginas o sitios web

del tipo http://example.com/login/?next=/facturas/cobranza son frecuentes. Si no

son validados, el atacante puede enviar a la víctima a un sitio de su elección, pasando

por alto los controles de seguridad. OWASP recomienda evitar el uso de

redirecciones y reenvíos, en caso de utilizar, no involucrar parámetros manipulables

por el usuario para definir el destino. Si los parámetros de destino no pueden ser

evitados, asegúrese que el valor suministrado sea válido y autorizado por el usuario.

Afortunadamente, los frameworks modernos como Django, mapean las URLs

autorizadas por la aplicación. Así, la URL http://example.com/facturas/cobranza

debe estar mapeado para ser reconocido como URL válido.

Toda aplicación Django mapea las URLs en el archivo urls.py. Por ejemplo:

from django.conf.urls import patterns, url

urlpatterns = patterns('apps.accounts.views',

url(r'^add_enterprise/$', 'add_enterprise', name='add_enterprise'),

url(r'^signup/$', 'signup_sys', name='signup_sys'),

url(r'^login/$', 'login_sys', name='login_sys'),

url(r'^load_access/(?P<headquar_id>.*)/(?P<module_id>.*)/$', 'load_access', name='load_access'),

url(r'^logout/$', 'logout_sys', name='logout_sys'),

url(r'^profile/edit/$', 'user_profile_edit', name='user_profile_edit'),

url(r'^choice_headquar/(?P<field>[\w\d\-]+)/(?P<value>.*)/$', 'choice_headquar', name='choice_headquar'),

url(r'^choice_headquar/$', 'choice_headquar', name='choice_headquar'),

)

Page 90: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

76

5.5.11 Registro de sucesos incompletos

Los sucesos del sistema ocasionados por las acciones de los usuarios del

sistema deben ser guardados en bitácoras en un lugar seguro, que no está en

carpetas públicas donde los atacantes puedan tener acceso. Estos registros pueden

ser automáticos y manuales.

En Django, los registros de los sucesos automáticos se configura en la variable

LOGGING del archivo de configuración settings.py

LOGGING = {

...

'handlers': {

'file_django': {

'level': 'DEBUG',

'class': 'logging.FileHandler',

'filename': os.path.join(BASE_DIR, 'temp/logs',

'dj%s.txt' % (datetime.datetime.now().strftime("%Y-%m-%d"))),

'formatter': 'verbose_dj'

},

Y el registro de los sucesos manuales, mayormente son realizados cuando se

presenta alguna excepción:

import logging

from apps.utils.security import log_params

log = logging.getLogger(__name__)

try:

self.get_object()

except Exception, e:

log.warning(e, extra=log_params(self.request))

Page 91: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

77

5.5.12 Datos incompletos

La falta de integridad en las transacciones de datos es frecuente, se debe hacer

pruebas de estas transacciones y asegurar que los datos se estén guardando de

forma correcta en todas las tablas de base de datos afectados.

En Django, una forma de asegurar la transacción de los datos es:

from django.db import transaction

@transaction.atomic

def user_add(request):

if request.method == "POST":

try:

sid = transaction.savepoint()

...

except Exception, e:

transaction.savepoint_rollback(sid)

message.error(request, e)

5.5.13 Permisos inconsistentes

Muchas veces se definen modelos de datos que no reflejan el control de

usuarios como el negocio requiere, siendo muy limitados y hasta fáciles de descifrar

por un atacante. Un buen diseño debe dificultar el entendimiento de un intruso de

sobre cómo se distribuyen los accesos.

La figura 17 muestra el modelo de datos que Django usa para el control

adecuado de accesos a sus usuarios.

Page 92: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

78

Figura 17 – Modelo de autorización de usuarios Django

Django guarda los accesos a los métodos en la tabla de base de datos

Permission. Estos permisos están agrupados en la tabla Group y Group agrupa a los

usuarios en User. Así un usuario tiene accesos dependiendo de los Group asignados.

La figura 18 muestra el modelo de datos que el backend web seguro usa para

el control adecuado de accesos a sus usuarios en la nube.

class sad/models.py cloud

User

- last_headquar_id: CharField

- last_module_id: CharField

+ __unicode__( ) : self.username

django.contrib.auth.models::Group

+ __unicode__( ) : self.name

django.contrib.auth.models::

AbstractUser

- date_joined: DateTimeField

- email: EmailField

- first_name: CharField

- is_active: BooleanField

- is_staff: BooleanField

- last_name: CharField

- username: CharField

django.contrib.auth.models::

Permission

+ __unicode__( ) : self.name

+user_set 0..*

+groups

0..*+group_set 0..*

+permissions 0..*

Page 93: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

79

Figura 18 – Modelo de autorización de usuarios de aplicaciones SaaS

En síntesis, el backend extiende la seguridad de Django para aplicaciones

SaaS, personalizando los servicios y los menús dinámicos del sistema. Esto permite

reutilizar y extender la funcionalidad de los componentes de seguridad de Django.

class sad/models.py cloud

User

- last_headquar_id: CharField

- last_module_id: CharField

+ __unicode__( ) : self.username

UserEnterprise

Module

+ __unicode__( ) : self.name

django.contrib.auth.models::Group

+ __unicode__( ) : self.name

space/models.py::Enterprise

- is_active: BooleanField

- is_actived: BooleanField

- logo: ImageField

- name: CharField

- tax_id: CharField

+ __unicode__( ) : self.name

space/models.py::Solution

- created_at: DateTimeField

- description: CharField

- is_active: BooleanField

- is_actived: BooleanField

- name: CharField

- price: FloatField

- test_date: DateTimeField

- test_image: ImageField

- updated_at: DateTimeField

+ __unicode__( ) : self.name

django.contrib.auth.models::

AbstractUser

- date_joined: DateTimeField

- email: EmailField

- first_name: CharField

- is_active: BooleanField

- is_staff: BooleanField

- last_name: CharField

- username: CharField

django.contrib.auth.models::

Permission

+ __unicode__( ) : self.name

params/models.py::Person

- birth_date: DateField

- first_name: CharField

- identity_num: CharField

- last_name: CharField

- photo: ImageField

+ __str__( ) : self.first_name, self.last_name, self.identity_num

Menu

+ __unicode__( ) : self.title

«enumeration»

MODULE_CHOICES

BACKEND = Backend Manager

WEB = Web informativa

VENTAS = Ventas

+userenterprise_set 0..*

+group 1

+module_set 0..*

+groups 0..*

+initial_groups_module_set 0..*

+initial_groups 0..*

+module_set 0..*

+solutions 0..*

+enterprise_set

0..*

+solution

0..1

+user_set 0..*

+groups

0..*

0..*

1

+userenterprise_set

0..*

+enterprise 1

+group_set 0..*

+permissions 0..*

+user 0..1

+person 0..1+menu_set 0..*

+parent 0..1

+menu_set 0..*

+permission 0..1

Page 94: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

80

Como Django, guarda los accesos a los métodos en la tabla de base de datos

Permission. Estos permisos están agrupados en la tabla Group y Group agrupa a los

usuarios. Así un usuario tiene accesos dependiendo los Group asignados.

Los Group (perfil de usuario) son agrupados en Module, y los Module en

Solution. Cuando se asigna un Solution a una Enterprise, este conoce los Group y

Permission de sus Modules.

UserEnterprise, permite conocer los Group de un User para una Enterprise

actual. La Enterprise actual se almacena temporalmente en la clase UserToken

cuando el User la elija.

class UserToken:

"""

Clase que permite almacenar y recuperar los permisos a datos de las empresas solicitados por los usuarios.

"""

@staticmethod

def set_enterprise_id(request, enterprise_id):

request.session['enterprise_id'] = enterprise_id

@staticmethod

def get_enterprise_id(session):

return session.get('enterprise_id', False)

El método load_access permite cargar estos datos de forma segura:

from django.contrib.auth.decorators import login_required

from apps.sad.models import BACKEND

from apps.space.models import Headquar

@login_required(login_url="/accounts/login/")

def load_access(request, headquar_id, module_id):

...

# cargando permisos de datos para el usuario

headquar = Headquar.objects.get(id=headquar_id)

UserToken.set_enterprise_id(request, headquar.enterprise.id)

...

Page 95: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

81

module = Module.objects.get(id=module_id)

if BACKEND == module.module:

return HttpResponseRedirect("/mod_backend/dashboard/")

...

Una vez que el usuario elija la Enterprise y el Module a la que está ingresando,

se carga el Menu para el User.

5.6 Demostración y validación de la seguridad

La Demostración y validación de la seguridad del backend, fueron realizados

en la reunión del Project definition para el proyecto Qualpaca.

En la pruebas de seguridad del módulo backend, de los 13 riesgos de seguridad

o vulnerabilidades identificados, todos fueron controlaron por completo por los

componentes de seguridad implementados.

Los nuevos riesgos de seguridad encontrados fueron respecto a las

particularidades de protección para los módulos del Qualpaca, lo cual se explica en

el siguiente capítulo.

En las pruebas de intrusión de módulo backend, de los 13 riesgos de seguridad

fueron mitigadas, logrando el 100% de vulnerabilidades mitigadas (respecto a las

trece vulnerabilidades).

Las líneas de código el que cumplen los estándares de codificación fueron

evaluados usando la herramienta PEP8 de Python. Logrando tener de 3 a 10 líneas

que no respetan los estándares de PEP8 de más de 100 líneas de código obteniendo

el 90% de cumplimiento.

En cuanto al cumplimiento del estilo de codificación de los métodos, no se

cuenta con herramientas para dicho cometido. Por lo que mediante una revisión

manual, se pueden observar el cumplimiento al 90%.

5.7 Resumen

El módulo backend web seguro definió las características arquitectónicas de

seguridad de una aplicación web, así como el estilo de codificación para el resto del

proyecto.

Page 96: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

82

6 CAPÍTULO 6

VALIDACIÓN DEL MODELO PROPUESTO

WSM-DEV – PARTE 2

6.1 Introducción

En este capítulo se describe la aplicación y validación de la segunda parte del

modelo propuesto WSM-DEV; sobre los grupos de procesos 2, 3 y 4. La primera parte

del modelo se aplica y se valida en el anterior capítulo. A partir de este backend se

inicia el ciclo iterativo de los tres grupos de procesos del modelo WSM-DEV.

Para ambas partes se realizan mediante el desarrollo de una aplicación web

para la Cadena Productiva de Alpacas (patrocinado por CONCYTEC y la UPeU en

el año 2013) denominada “Qualpaca” versión 1.0

Con la aplicación y validación de esta segunda parte del modelo WSM-DEV se

logró refinar las actividades y artefactos de dicho modelo.

6.2 Análisis de riegos de seguridad

Luego de definir y validar los requisitos de Qualpaca, se analizaron los activos

de información que requieren de cierta protección, ya que el backend web seguro

contaba con componentes para dar seguridad a los recursos y datos que maneja

Qualpaca; es decir, el backend, permitió analizar directamente los riesgos de

seguridad para el negocio.

Estos entregables puede verse en los anexos C1 al C9. Además, se adjunta

parte de los demás entregables del proyecto en los anexos C10 al C12.

Para el desarrollo de la aplicación Qualpaca, por motivos de tiempo, no se

aplicó el TDD, es por eso que para distribuir las tareas se realizó el diseño del sistema

a partir de los componentes del backend web seguro. Cada componente del diseño

del sistema quedó debidamente documentado; las reglas de negocio y las

restricciones de seguridad, todo ello bajo el estilo de codificación y la arquitectura de

la aplicación.

Page 97: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

83

Para una mejor distribución del mantenimiento de los registros de alpacas en

el sistema, se decidió asignar uno o más grupos de alpacas a un usuario técnico del

sistema, y como consecuencia se presentó el siguiente riesgo de seguridad: que otro

usuario técnico modifique los registros de alpacas de otro grupo de alpacas. Cuyo

impacto es alto, pues los datos de la alpaca son fundamentales para el mejoramiento

de la fibra.

6.3 Implementación de los componentes de seguridad

Mantener el registro de riesgos de seguridad, ayudó la implementación de los

componentes de seguridad. El motivo por la cual se incorpora en los requisitos es

justamente para su testeo y validación.

Para Qualpaca, solo se extendió la protección del componente UserToken con

la finalidad de validar la manipulación de datos no solo nivel de sucursal o sede o

rebaño, sino también a nivel de grupos o manadas de un rebaño.

El resto de actividades de la fase de implementación fueron las capacitaciones

para el uso adecuado de los componentes de seguridad del backend web seguro.

La revisión y validación de los componentes de seguridad durante la

implementación se realizó juntamente con las pruebas manuales por parte del equipo

de pruebas.

6.4 Demostración y validación de la seguridad

Los resultados de la fase de demostración y validación de la seguridad, fueron

realizados juntamente con la demostración y retrospectiva del Sprint de Scrum.

Los registros de riesgos de seguridad, y componentes de seguridad de los

anexos B2, B2, C2 y C3 fueron los checklist para verificar y validar los objetivos de

seguridad para la iteración. Como todo el desarrollo se hizo una iteración de 4

semanas, durante la semana 5, se hicieron las correcciones encomendadas.

En la pruebas de intrusión, de los 13 riesgos de seguridad del Backend, 12 se

controlaron por completo para los procesos de negocio del Proyecto Qualpaca. Esto

equivale al 92.30% de vulnerabilidades controladas o mitigadas. El riesgo de

seguridad RS03 Referencia Directa Insegura a Objetos no fue controlado a cabalidad

por lo que se agregó nuevos métodos al componente UserToken. Con este

componente se logró el 100% de vulnerabilidades mitigadas.

Se estimaron veinte (20) puntos historia para una Sprint de cuatro semanas,

logrando concretar todas las tareas en el plazo acordado, realizando así veinte

Page 98: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

84

puntos-historia de un mes. Sin embargo, debido los cambios en los requerimientos

se tuvo que definir seis días más para dar por finalizado el proyecto.

Las líneas de código de Qualpaca que cumplen los estándares de codificación

fueron evaluados usando la herramienta PEP8 de Python. Logrando tener de

cincuenta a cien líneas que no respetan los estándares de PEP8 de más de 400

líneas de código obteniendo apenas un 75% de cumplimiento. Esto se debe a que

no se usó el PEP8 desde el inicio del proyecto.

En cuanto al cumplimiento del estilo de codificación de los métodos, no se

cuenta con herramientas para dicho cometido. Por lo que mediante una revisión

manual, se pueden observar el cumplimiento al 80%.

Se logró desarrollar los nueve artefactos que solicita el modelo entre otros

entregable que el Scrum requiere. Para la definición del proyecto Qualpaca se usó el

formato para el acta de constitución del proyecto del PMBoK (Project Management

Body of Knowledge).

6.5 Resumen

La aplicación del modelo WSM-DEV, gracias a sus plantillas y a su backend

profesional aceleró el desarrollo y se obtuvo una aplicación web moderna y confiable.

Page 99: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

85

7 CAPÍTULO 7

RESULTADOS Y DISCUSIÓN

En este capítulo se presenta y se discute los resultados del presente trabajo de

tesis descritos en los capítulos 5, 6 y 7. Entre los principales resultado son:

7.1 Nuevo modelo práctico para desarrollar aplicaciones web seguras en el

menor tiempo.

El modelo propuesto denominado WSM-DEV, resume en 4 prácticas generales

la integración de la seguridad en el ciclo de vida de desarrollo de aplicaciones web,

mientras que la SSE-CMM contiene alrededor de 60 prácticas base de seguridad,

organizadas en 11 áreas de proceso que cubren las áreas principales de la ingeniería

de la seguridad. Lo que conlleva invertir mayores recursos de personal.

El modelo WSM-DEV provee de plantillas para cada uno de sus artefactos y,

de componentes de seguridad y utilitarios para la asignación directa de las tareas de

desarrollo de los requerimientos del negocio, permitiendo conocer la parte práctica

de cómo se aplica cada práctica; mientras que la SSE-CMM solo define qué prácticas

se debe emplear. La estrategia clave del modelo WSM-DEV consisten en

implementar primeramente el módulo backend mitigando trece vulnerabilidades de

toda aplicación web que correrá en la nube. Para el caso de implementación del

backend en el lenguaje de programación Python, estas vulnerabilidades se mitigaron

al 100% y para su aplicación en el proyecto Qualpca, este porcentaje se redujo al

92.30% debido a las particularidades de la seguridad del negocio de Qualpaca.

Así mismo, se intentó iniciar el desarrollo de Qualpaca sin contar con un

backend preliminar conduciendo a un desorden en los estándares y estilos de

codificación ya que cada programador hizo su mejor esfuerzo. Aunado al

desconocimiento de las principales vulnerabilidades y del lenguaje Python, se

comenzó a notar el retraso. Se contabilizó 6 meses de retraso (mayo a

noviembre/2013). Mientras se esperaba la primera versión del backend se fue

diseñando todo el sistema quedando cambios referentes al uso adecuado de los

componentes del backend. Terminado el backend para Django, se tuvo una semana

de capacitación y seguidamente se comenzó a desarrollar las tareas, cuya suma total

del trabajo de todas las tareas ascendió los 20 puntos historia, quedando terminado

en 5 semanas.

Page 100: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

86

Las líneas de código de Qualpaca que cumplen los estándares de codificación

fueron evaluados usando la herramienta PEP8 de Python. Logrando tener de 50 a

100 líneas que no respetan los estándares de PEP8 de más de 400 líneas de código

obteniendo apenas un 75% de cumplimiento. Esto se debe a que no se usó el PEP8

desde el inicio del proyecto. En la depuración del backend se pudo usar la

herramienta PEP8 y se logró un 90% en el cumplimiento del uso adecuado del estilo

de codificación

En cuanto al cumplimiento del estilo de codificación de los métodos, no se

cuenta con herramientas para dicho cometido. Por lo que mediante una revisión

manual, se pueden observar el cumplimiento al 80% en el proyecto Qualpaca y a un

90% en el módulo backend

7.2 Módulo backend de administración y configuración de aplicaciones web

tipo SaaS con Django.

El módulo backend web seguro para Python del modelo WSM-DEV, cubre trece

vulnerabilidades recurrentes en aplicaciones web y con la flexibilidad de extender a

casos específicos del negocio; mientras que las API de seguridad para Java de la

OWASP cubre solo diez vulnerabilidades y algunas vulnerabilidades para PHP. Para

Java o PHP solo se cuenta con componentes pero ningún backend.

Se extendieron las funcionalidades de los componentes nativos de seguridad

de Python como de Django en nuevos componentes de seguridad con la finalidad de

definir un estilo de codificación simple pero robusta. También se crearon nuevos

complementos de seguridad para mitigar las trece vulnerabilidades identificadas en

aplicaciones web tipo SaaS. Todos los componentes de seguridad implementados

en el Backend mitigaron las trece vulnerabilidades previamente identificadas (en el

anexo B2) mitigando el 100% de vulnerabilidades (respecto a las trece

vulnerabilidades).

Page 101: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

87

8 CAPÍTULO 8

CONCLUSIONES Y RECOMENDACIONES

En este capítulo se presenta las conclusiones principales de esta tesis, y

recomendaciones que orienten una mejor integración de la seguridad dentro del

proceso WSM-DEV, así como para nuevas investigaciones sobre la construcción de

aplicaciones web seguras.

8.1 Conclusiones

8.1.1 Se elaboró un modelo para el desarrollo de aplicaciones web seguras.

El modelo de Desarrollo de aplicaciones web seguras WSM-DEV, es el

principal aporte del trabajo de esta tesis. El modelo define cuatro principios y cuatro

prácticas de seguridad durante el ciclo de desarrollo para obtener una aplicación web

confiable en el menor tiempo. Los procesos del SSE-CMM guiaron la definición de

los componentes del WSM-DEV y las diez vulnerabilidades más frecuentes de la

OWASP definieron las características de una aplicación web confiable. Para una

aplicación rápida, se incluyen plantillas de los artefactos del modelo y una serie de

componentes de seguridad web implementados en el lenguaje de programación ágil

Python. La aplicación de este modelo en el proyecto Qualpaca, patrocinado por

CONCYTEC y la UPeU, se logró refinar sus actividades y artefactos y asignar un

peso adecuado a los indicadores de medición.

De los 13 riesgos de seguridad del backend, 12 se controlaron por completo

para los procesos de negocio del proyecto Qualpaca lo que equivale al 92.30% de

vulnerabilidades mitigadas. El riesgo que no fue completamente mitigado fue el RS03

Referencia directa insegura a objetos por lo que se agregó nuevos métodos al

componente de seguridad UserToken, logrando mitigar el 100% de vulnerabilidades

(respecto a las 13 vulnerabilidades previamente definidas).

8.1.2 La aplicación del modelo WSM-DEV es mucho más simple con modelos

ágiles de software.

El principal grupo de procesos del WSM-DEV es el análisis de riesgos de

seguridad, donde se identifican las amenazas y vulnerabilidades de la aplicación web

para la iteración; estas actividades pueden integrarse a las reuniones de planificación

de la iteración y seguir los procesos del desarrollo bajo una modelo de software ágil.

Page 102: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

88

Sin embargo, también puede integrase a partir de la fase de requisitos en un modelo

de software formal de ingeniería.

8.1.3 Se desarrolló un backend web seguro sobre Django para aplicaciones web

de tipo SaaS

El módulo del backend para administrar aplicaciones web permite gestionar de

manera rápida y segura a los usuarios, perfiles, permisos, recursos del sistema,

módulos del sistema, menús dinámicos, empresas, sucursales entre otros

parámetros de configuración del sistema.

Este módulo se desarrolló en dos meses por una sola persona, y permitió la

implementación directa de los requisitos del proyecto Qualpaca, terminando en cinco

semanas todo el desarrollo.

El estilo de codificación del backend, permitió la concentración del equipo y

realizar las tareas del módulo de producción del proyecto Qualpaca. Logrando

desarrollar 20 puntos historia en un mes.

El cumplimiento de los estándares de codificación se verificó mediante la

herramienta PEP8 de Python, alcanzado un 90% del cumplimiento.

Finalmente, gracias al backend que sigue un estilo de codificación, pudo ser

interiorizado en todos los programadores alcanzando más del 80% del cumplimiento.

8.1.4 Se cuenta con un catálogo de componentes de seguridad

El catálogo de componentes de seguridad, especificado en el anexo B3, queda

como librerías útiles para ser aplicado o guía para las nuevas aplicaciones web que

mitigan trece principales vulnerabilidades de las aplicaciones web.

8.2 Recomendaciones

8.2.1 Completar los test automatizados para el backend web seguro

Para aplicar poder desarrollar una aplicación web completamente con TDD,

primero se debe terminar de implementar los test de unitarios del módulo backend.

8.2.2 Backend web seguro para arquitecturas Single Page Application (SPA)

El futuro de la web es JavaScript, con AngularJS como el framework más

popular; por lo que se necesita una backend con estas características.

Page 103: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

89

8.2.3 Backend Web seguro con otros frameworks para Python u otros lenguajes

de programación.

Dado que en el mercado de Perú, los lenguajes de programación más

preferidos son .Net y Java, se requiere un backend sobre estas plataformas.

8.2.4 Antes de iniciar el desarrollo de un proyecto de software se necesita un

backend.

Para desarrollar un software, lo primero que el equipo de desarrollo debe contar

es con un backend con los componentes y librerías que una aplicación web necesita,

sobre todo, debe reflejar el estilo de codificación que facilitará la revisión de la calidad

del código. Este backend permite, atender directamente los requisitos del negocio.

Se recomienda definir una persona o un equipo que construya los nuevos

componentes y utilitarios comunes de la nueva aplicación e integrarlos en el backend

a modo de ejemplo, de modo que el equipo de desarrollo se concentre en atender

los requisitos del proyecto.

Page 104: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

90

REFERENCIAS

Laudon K, Laudon J. 2012. Sistemas de Información Gerencial. 12° ed. México:

Pearson Educación. 640 p. ISBN 978-607-32-0949-6.

OWASP, 2013. Una Guía para Construir Aplicaciones y Servicios Web Seguros. The

Open Web Application Security Project [OWASP]. 4da ed. 311 p. Edición en

español

OWASP, 2013. OWASP Top 10 – 2013 Los diez riesgos más importantes en

Aplicaciones Web . 22 p. Edición en español

OWASP, 2008. Guía de Pruebas OWASP. 3ra ed. 372 p. Edición en español

OpenSAMM, 2010. Softwaer Assurance Maturity Model. OWASP. 1ra ed.

Ardi S, Shahmehri N, 2008. Integrating a Security Plug-in with the OpenUP/Basic

Development Process. Linköpings: Linköpings University. Department of

computer and information science. 8 p.

Ardi S, 2008. A Model and Implementation of a Security Plug-in for the Software Life

Cycle. Thesis No. 1353. Linköpings: Linköpings University. 124 p.

Gasca G. 2006. Análisis de Riesgos para el Desarrollo de Software Seguro.

Tovar E y colaboradores, 2006. Desarrollo de Productos de Software Seguros en

Sintonía con los Modelos SSE-CMM, COBIT E ITIL

ISO 27001, 2005. Tecnología de la Información – Técnicas de seguridad – Sistemas

de gestión de la información – Requerimientos. 1ra ed. 41 p. Uso para fines

didácticos.

ISO 17799, 2005. Tecnología de la Información – Técnicas de seguridad – Código

para la práctica de la gestión de la seguridad de la información. 2ra ed. 170

p.

Yepes R y Chavarría R, 2010. Un Enfoque para el Desarrollo Ágil de Aplicaciones

Web, Usando Scrum, Extreme Programing y Herramientas Open Source

sobre Plataforma Java: Caso de Estudio Mejoramiso Next. Facultad de

Ingeniería, Universidad de Antioquía

Schwaber K, Sutherland J. 2010. Scrum Guide: Scrum: Desarrollado y mantenido por

Ken Schwaber y Jeff Sutherland. 24 p.

Schwaber K, Sutherland J. 2011. Scrum Guide Update 2011. 1 p.

Page 105: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

91

Schwaber K, Sutherland J. 2011. The Scrum Guide. The Definitive Guide to Scrum:

The Rules of the Game. 17 p.

Palacio J, Ruata C. 2011. Scrum Manager Gestión de Proyectos. Rev 1.4. 131 p.

Palacio J. 2007. Flexibilidad con Scrum. 229 p.

ISO 9000, 2005. Sistemas de gestión de la calidad – Fundamentos y vocabulario.

Ginebra, Suiza. 42 p.

Calderón M, 2007. Una Taxonomía de Requerimientos de Seguridad de Software.

Escuela de Ciencias de la Computación e Informática, Universidad de Costa

Rica. Artículo de 9 páginas.

Schwaber K. Agile Project Management with Scrum

Schwaber K. Agile Software Development with Scrum

Schwaber K. The Enterprise and Scrum

White S y Miers D, 2007. BPMN Guía de Referencia y Modelado. OMG, Quality

Softcover Perfect Bound. 226 p.

INTECO, 2010. Implantación de un SGSI en la empresa. Instituto Nacional de

Tecnologías de la Comunicación. España.

NEXUS, 2006. Parámetros fundamentales para la implantación de un Sistema de

Gestión de Seguridad de la Información según ISO 27001:2005

http://www.nexusasesores.com/docs/ISO27001-norma-e-implantacion-SGSI.pdf

visitado el 18 de abril de 2010.

NTP-ISO, 2006. Tecnología de la información. Procesos del ciclo de vida. (NTP-

ISO/IEC 12207:2006). 2da ed.

Barnum, S., McGraw, G., 2005, Knowledge for Software Security,IEEE Security &

Privacity, 74-78

McGraw, G., 2006, Software Security. Building Security In.

Viega J.; McGraw, G., 2001, Building Secure Software: How to avoid security

problems the right way,

Kan S. 1995. Metrics and Models in software Quality Engineering. Addison-Wesley

Kniberg H, Skarin M. 2010. Kanban y Scrum obteniendo lo mejor de ambos. C4Media

Inc. InfoQ. ISBN: 978-0-557-13832-6

Kniberg H. 2007. Scrum y XP desde las trincheras. C4Media Inc. InfoQ

Page 106: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

92

Paulsson J, Westberg C. 2010. Secure Scrum During the Development of a

Configuration Tool for Generic Workflow.

Pressman R. 2002. INGENIERÍA DE SOFTWARE: UN ENFOQUE PRACTICO.

Shaw M., Garlan D. 1997. Software Architecture–Perspective son an Emerging

Discipline. Prentice Hall.

Succi G, Marchesi M. 2000. Extreme Programming Examined. IBM, 2011. Security

Compliance. http://www-01.ibm.com/software/tivoli/library/demos/

ibmscdemo/IBM_Security_Compliance.html Consultado el 04 de Octubre de

2011.

Llorente I, 2008. Seguridad en las Tecnologías de la Información. XX Seminario

“Duque de Ahumada” “Seguridad y Nuevas tecnologías”. http://dsa-

research.org/lib/exe/fetch.php?id=people%3Allorente%3Aresearch&cache=c

ache&media=people:llorente:seguridad_en_las_tecnologias_de_la_informaci

on.pdf, Consultado el 08 de Septiembre de 2011.

Cheng K. 2007. Baking in Security During the Systems Development Life Cycle. Booz

Allen Hamilton. [www.stsc.hill.af.mil/crosstalk/2007/03/index.html].

Consultado el 08 de Septiembre de 2011

Microsoft, 2011. Microsoft Security Development Lifecycle (SDL) – Process

Guidance. http://msdn.microsoft.com/en-

us/library/windows/desktop/84aed186-1d75-4366-8e61-8d258746bopq.aspx

Consultado el 08 de Septiembre de 2011

Microsoft, 2011. Security Development Lifecycle for Agile Development

http://msdn.microsoft.com/en-us/library/windows/desktop/ee790621.aspx

Consultado el 08 de Septiembre de 2011

Puyo R, 2009. Sistema de Gestión de la Seguridad de la Información SGSI ONP.

Oficina de Normalización Previsional – ONP.

http://www.pecert.gob.pe/archi/talle012009/04-caso-onp.pdf Consultado el 08

de Septiembre de 2011

Piñero B, 2009. La tecnología como facilitador del cumplimiento de los controles de

un SGSI. crsi.ie.edu/files/documentacion/Catedra_de-riesgos_Oracle.ppt

Consultado el 08 de Septiembre de 2011

Fernández J, 2006. OWASP –presentación del proyecto. Conferencias FIST

https://www.owasp.org/images/b/b6/OWASP-Testing-Project_v1.pdf

Consultado el 08 de Septiembre de 2011

Page 107: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

93

Beck K y Colaboradores, 2001. Manifiesto por el Desarrollo Ágil de Software.

http://agilemanifesto.org/iso/es/. Consultado el 06 de Octubre de 2011.

Meier J y Colaboradores, 2007. MSF para desarrollo Ágil de software.

http://msdn.microsoft.com/en-us/library/bb668964.aspx Consultado el 06 de

Octubre de 2011.

Scott W. 2005. Scott W. Ambler's Home Page.

http://www.ambysoft.com/scottAmbler.html Consultado el 06 de Octubre de

2011

Palacio J, 2005. Procesos y técnicas para desarrollo de software.

http://www.navegapolis.net. Consultado el 06 de Octubre de 2011.

Qualys Guard. 2008. Web Application Scanning.

http://www.qualys.com/docs/QG_WAS_DS_ES.pdf. Consultado el 11 de

Octubre de 2011.

BConsultores, 2011. Arquitectura de Seguridad. Balarezo Consultores.

http://bconsultores.com/pages/arquitectura_de_seguridad.pdf Consultado el

11 de Octubre de 2011.

Page 108: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

94

GLOSARIO

Riesgo: Es la estimación del grado de exposición de un activo o recurso, a que una

amenaza se materialice sobre él, causando daños a la organización. El riesgo indica

lo que le podría pasar a los activos si no se protegen adecuadamente.

Amenaza: Es la posibilidad de ocurrencia de cualquier tipo de evento o acción que

puede producir daño (material o inmaterial) sobre los elementos (activos, recursos)

de un sistema.

Vulnerabilidad: Son las debilidades, las condiciones y características del sistema

mismo (incluyendo la entidad que lo maneja), que lo hace susceptible a amenazas,

con el resultado de sufrir algún daño.

Impacto: Es la consecuencia de la materialización de una amenaza sobre un activo.

Riesgo intrínseco: Es la posibilidad de que se produzca un impacto determinado en

un activo.

Salvaguarda: Son las prácticas, procedimientos o mecanismos que reducen el

riesgo y disminuyen el impacto y la probabilidad.

Riesgo residual: Es el riesgo que queda tras la aplicación de salvaguardas.

Ataque: Es una amenaza que se convirtió en realidad, es decir cuando un evento se

realizó. No dice nada si o no el evento fue exitoso.

Autenticidad: La legitimidad y credibilidad de una persona, servicio o elemento debe

ser comprobable.

Confidencialidad: Datos solo pueden ser legibles y modificados por personas

autorizados, tanto en el acceso a datos almacenados como también durante la

transferencia de ellos.

Integridad: Datos son completos, non-modificados y todos los cambios son

reproducibles (se conoce el autor y el momento del cambio).

Disponibilidad: Acceso a los datos debe ser garantizado en el momento necesario.

Hay que evitar fallas del sistema y proveer el acceso adecuado a los datos.

Elementos de información: También “Activos” o “Recursos” de una institución que

requieren protección, para evitar su pérdida, modificación o el uso inadecuado de su

Page 109: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

95

contenido, para impedir daños para la institución y las personas que salen en la

información. Se distingue y divide tres grupos, a) datos e información, b) sistemas e

infraestructura y c) personal.

Gestión de riesgo: Método para determinar, analizar, valorar y clasificar el riesgo,

para posteriormente implementar mecanismos que permitan controlarlo. Está

compuesta por cuatro fases: 1) análisis, 2) clasificación, 3) reducción y 4) control de

riesgo.

Seguridad informática: Procesos, actividades, mecanismos que consideran las

características y condiciones de sistemas de procesamiento de datos y su

almacenamiento, para garantizar su confidencialidad, integridad y disponibilidad.

Auditoría de seguridad: Permitir el registro de eventos (hay que identificar cuáles

pueden ser interesantes desde el punto de vista de la seguridad).

Gestión de seguridad: Definición de perfiles de usuario y niveles de acceso

asociados.

Autodefensa: La aplicación debe incluir sistemas de validación de su funcionamiento

y fallar de manera segura si esa validación no se cumple.

Control de acceso: Soporte de sistemas que limiten el número y tipo de sesiones,

el nivel de concurrencia y que proporcionen información sobre sesiones anteriores al

usuario para ayudar a la detección de intrusos.

Estándares de desarrollo: Define estratégicamente el nombre de los identificadores

del sistema, como son variables, clases, funciones, tablas, contantes, etc.

Estilo de codificación: Provee un orden de las instrucciones del programa para una

clase o método, en función de los estándares de desarrollo.

UML: Es el lenguaje de modelado de sistemas de software más conocido y utilizado

en la actualidad; está respaldado por el OMG (Object Management Group).

Page 110: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

96

9 ANEXOS

10 Anexo 1 – Matriz de consistencia del proyecto

Título de la investigación: “Un modelo para el desarrollo de aplicaciones web seguras”

Problema Objetivo Marco teórico Indicadores Metodología

¿Cuales son las

dificultades para

aplicar las guías

o modelos de

seguridad?

O. General.

Elaborar un modelo de

trabajo práctico para

desarrollar aplicaciones

web seguras (menores

vulnerabilidades) y en el

menor tiempo basadas

en los procesos de la

metodología SSE-CMM,

el Proyecto OWASP y

experiencias vividas.

Objetivos específicos:

Analizar las prácticas del

SSE-CMM respecto al

ciclo de vida del

desarrollo de software.

Implementar los

controles de seguridad

según la OWASP top 10

para un

lenguaje/framework

específico.

Establecer los principios

y prácticas del modelo a

proponer.

Refinar el modelo

mediante su aplicación

en un proyecto web tipo

SaaS.

Antecedentes:

SSE-CMM

OWASP

Porcentajes de

vulnerabilidades

controladas

Tipo de

investigación:

Aplicada

Método:

Investigación

Evaluativa

Velocidad del

equipo ágil de

desarrollo

¿Por qué las

aplicaciones con

requisitos

complejos y con

límites de tiempo

han contribuido al

incremento de

fallas o

vulnerabilidades

de software?

Porcentaje de

métodos que

cumplen el estilo

de codificación

Porcentaje de

líneas de código

el que cumplen

los estándares

de codificación

¿Cuales son las

causas que

ocasionana

grandes pérdidas

monetarias, y

hasta la pérdida

de confianza de

los clientes,

empleados y

socios de

negocio?

Page 111: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

97

Anexo A1 – Requisitos del sistema

Proyecto: ______ --_______________________________________________________

Fecha de actualización: ____/_____/______

Código/Sprint

Requisito Estado Estimac. Prioridad

RF01 /1

Requisito 1: Descripción: Pruebas de aceptación y de seguridad: 1. 2.

Nuevo 8 puntos historia

1000

RF02 /1

Requisito 2: Descripción: Pruebas de aceptación y de seguridad: 1. 2.

En Progreso

6 puntos historia

900

RF03 /1

Requisito 3: (reemplazo por RF04) Descripción: Pruebas de aceptación y de seguridad: 1. 2.

Retirado 4 puntos historia

800

RF04 /2

Requisito 4: (cambio en reemplazo de la RF03) Descripción: Pruebas de aceptación y de seguridad: 1. 2.

Hecho 4 puntos historia

700

Page 112: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

98

Anexo A2 - Registro de riesgos de seguridad (amenazas y vulnerabilidades)

Proyecto: ______ --_______________________________________________________

Fecha de actualización: ____/_____/______

COD Riesgo de seguridad Tipo (A/V)

Probabilidad

Impacto

Prioridad

1000

A: Amenza V: Vulnerabilidad

Probabilidad: Alta, Media, Baja

Impacto: Alta, Media, Baja

Page 113: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

99

Anexo A3 - Registro de componentes de seguridad

Proyecto: ______ --_______________________________________________________

Fecha de actualización: ____/_____/______

COD Componente de seguridad

Riesgos de seguridad

Page 114: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

100

Anexo A4 – Arquitectura de la aplicación

1. Información general

Código y nombre del proyecto:

2. Historial de revisiones

Versión - Fecha - Elaborado por

3. Arquitectura de la aplicación MTV (equivalente a MVC)

Capa Tecnología Función

Modelo: M Django Model Entidades y mapeamientos

Django Manager Extiende utilitarios del Model

Django Test/Unit Test Pruebas unitarias del modelo

Vista: V Django View Django Form

Controlador de solicitudes y respuestas Reglas de negocio y restricciones

SAD Backend Solicitudes y respuestas con AJAX Restricciones de seguridad Logs Mensajería y Notificaciones

Django Test Pruebas de integración de las vistas y de los formularios

Template: T Django Template Interfaces gráficas de usuario para las entradas de datos y mostrar resultados

Bootstrap Diseño responsivo multidispositivo

JQUERY Utilitarios diversos

AJAX+ JSON Solicitudes y respuestas asíncronas

SAD Frontend Solicitudes y respuestas con AJAX Generación de objetos HTML en tiempo de ejecución Hojas de estilos personalizados

Selenium Pruebas funcionales en la Web

Page 115: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

101

Anexo A5 – Estándares de desarrollo

1. Información general

Código y nombre del proyecto:

2. Historial de revisiones

Versión - Fecha - Elaborado por

3. Términos de definición de identificadores

ID Término Ejemplo

Proyecto <nombre_proyecto> agil_cont

Paquetes <nombre_carpeta> catalogo_productos

Base de datos <nombre_db> agil_cont_db

Tablas <prefix_nombre_tabla> common_natural_person

Atributo PK id id

Atributo <nombre_atributo> functional_code

Atributo FK <tabla>_id natural_person_id

Paquetes <nombre_carpeta> catalogo_productos

Clases <NombreClase><NombreCapa/vacio> class NaturalPerson

Variables <nombre_variable> functional_code

Contantes <NOMBRE_CONSTANTE> DEFAULT="DNI"

Método <nombre_metodo>(var_nombre) def add(); def edit(); def delete(); def get_by_id(id); def get_list_by_filter(filter);

Enumerators <NOMBRE_ENUM> DEFAULT="DNI" CE="CE" OTHERS="OTHERS" IDENTITY_CHOICES = ( (DEFAULT, "D.N.I."), (CE, "C.E."), (OTHERS, "Otro.") )

Archivos <nombre_pagina>.<py/html> natural_person.html

Interfaces I<NombreClase><NombreCapa/vacio> INaturalPersonService

Page 116: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

102

Anexo A6 – Método de trabajo del equipo

1. Información general

Código y nombre del proyecto:

2. Historial de revisiones

Versión - Fecha - Elaborado por

3. Equipo de trabajo

Rol Nombre Ciudad Correo/Celular Tiempo

Product Owner Nombre del cliente 50%

Scrum Master Nombre del Jefe del proyecto 50%

Dupla 1-Doc. Nomb. Programador 1 Nomb. Programador 2

50% 50%

Dupla 2-Dev. Nomb. Programador 3 Nomb. Programador 4

100% 100%

Dupla 3-Dev. Nomb. Programador 5 Nomb. Programador 6

50% 50%

4. Herramientas

Elemento Herramienta Hosting

Portal de gerenciamiento

Assembla.com https://www.assembla.com/spaces/djangobackend

Portal de integración

Github.com https://github.com/submitconsulting/django_backend_project

Modelo y Prototipado

Enterprise Architect 7.5 Balsamiq

http://djangobackend-model.appspot.com

Lenguaje de programación

Python

Frameworks Django 1.6.2

Framework responsivo

Bootstrap

Base de datos MySQL 5.x

IDE Sublime Text 2

Comunicaciones Facebook https://www.facebook.com/groups/262927820527361

Page 117: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

103

5. Retos a superar

Desafío Solución

Respecto a la metodología scrum Definir la duración del sprint a 4 semanas Lea la wiki y utilice el foro de discusión del portal de gerenciamiento (Mensajes)

Respecto al equipo distribuido (parcial o totalmente, horarios, idiomas diferentes)

Definir las tareas en base a una unidad de trabajo diario o semanal (que incluya testes) Informar el estado de las tareas en el portal de gerenciamiento, incluye horas restantes. Enviar el reporte de trabajo diario o semanal (StandUp) Documentación en inglés Consigue una llamada con Hangout, Facebook o Skype

Respecto a las herramientas de trabajo

Entrenamiento en las herramientas a usar

Respecto a la experiencia de los desarrolladores

Cada código, diagrama, prototipos debe seguir el estándar de desarrollo elegido Entrenamiento en las tecnologías a usar

Respecto a la documentación El diseño/prototipo/restricciones deben estar listos y validados a un Sprint de anticipación

Falta de compromiso del cliente Involucrar al cliente en las reuniones y demos

Page 118: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

104

Anexo A7 – Prototipos principales

Proyecto:

Módulo:

Fecha:

Requisito 1:

Imagen N°

Funcionalidad:

Aprobado por:

Page 119: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

105

Anexo A8 – Diseño del sistema

1 INFORMACIÓN GENERAL

Código y Nombre del proyecto:

2 HISTORIAL DE REVISIONES

Versión - Fecha

3 ACTUALIZACIONES IMPORTANTES

4 LINKS DE DESCARGA O DE CONSULTA

Modelo [http://djangobackend-model.appspot.com/DBackend-20131115/index.htm]

Scripts

5 ESTRUCTURA DEL MODELO

Módulo

---Modelo del dominio

--- ---app

--- --- ---Diagrama de entidades

---Modelo de clases

--- ---Capa(si es Models o Views(Views en MVC es Controllers))

--- --- ---app

--- --- --- ---Diagrama de clases de diseño

--- --- --- --- ---Ejemplo completo del diagrama (explica las relaciones a detalle)

---Requisitos

--- ---Requisitos funcionales

--- ---Requisitos no funcionales

---Interfaz de usuario

--- ---Capa(template para django)

--- --- ---app

--- --- --- ---entity o rol

--- --- --- --- ---prototipo(.html)

Diagrama Vista general del proyecto

Diagrama de procesos de negocio

Page 120: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

106

Anexo A9 – Formulario de lecciones aprendidas

Proyecto:

N° Iteración:

Qué salió bien en la Iteración 1. 2.

Qué no salió bien en la Iteración 1. 2.

Qué mejoras vamos a implementar en la siguiente Iteración 1. 2.

Page 121: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

107

Anexo B1 – Requisitos del Sistema (módulo backend web seguro)

Proyecto: Backengo

Fecha de actualización: __04__/__09__/__2013__

Código/Sprint

Requisito Estado Estimac. (horas)

Prioridad

RF01 /1

Gestión de permisos de usuarios Descripción: Permite distribuir determinados permisos a un Grupo de usuarios para que puedan utilizar a ciertas funcionalidades específicas del sistema según los permisos asignados a dicho Grupo. Para ello: Definir los recursos (permisos en django) del sistema a partir del módulo "auth" de django Definir los Grupos de usuarios a partir del módulo "auth" de django Definir los permisos de los Grupos de usuarios. Pruebas de aceptación y de seguridad: 1.

Hecho

RF02 /1

Gestión de los planes de servicios SaaS Descripción: Permite distribuir accesos a los usuarios de una determinada empresa y/o asociación para que pueda utilizar ciertas funcionalidades del sistema según los permisos asignados a un determinado Plan de servicio. Para ello: Definir los Módulos de la aplicación Definir los Permisos de los Módulos Definir el grupo de módulos denominado Plan de servicio (Solution) Definir los Módulos del plan (Solution) Pruebas de aceptación y de seguridad: 1.

Hecho

RF03 /1

Gestión de menús dinámicos Descripción: Permite definir el Menú de los módulos para facilitar al usuario el acceso a las funcionalidades del sistema Para ello: Definir Menú para los recursos del sistema y organizados por Módulos Pruebas de aceptación y de seguridad: 1. Cuando se elige el módulo y la sede o empresa o asociación se debe visualizar el Menú del usuario según los Permisos asignados al usuario para dicha Sede/empresa/asociación y Módulo.

Hecho

RF04 /1

Abir una cuenta en el sistema Descripción: Permite abir una cuenta para un nuevo usuario, nueva asociación y nueva empresa para que pueda utilizar las funcionalidades del sistema según el plan de servicio escogido. Pruebas de aceptación y de seguridad:

Hecho

RF05 /1

Inicio de sesión Descripción: Permite iniciar sesión de la aplicación web que sirva para utilizar ciertas funcionalidades específicas del sistema para el usuario registrado. Pruebas de aceptación y de seguridad:

Hecho

Page 122: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

108

1. Cuando se inicia sesión de la aplicación web, Se debe cumplir que si usuario ingresa nombre de usuario y contraseña correctas, se presenta el mensaje "Bienvenido, "+nombre de usuario, mostrando la lista de empresas junto con los módulos a los cuales tiene permiso. 2. Cuando se inicia sesión de la aplicación web, Se debe cumplir que si usuario ingresa nombre de usuario incorrecto o contraseña incorrecta, se presenta el mensaje "Usuario o contraseña incorrectos".

RF06 /2

Gestión de la estructura organizacional para la nube Descripción: Permite establecer la estructura de la organiación en asociaciones, empresas y sedes Para ello: Permite que la asociación defina otras empresas Permite que la empresa agregue otras sedes, y para diversas asociaciaciones Permite que la asociación/empresa cambie de Plan de servicio Permite que la asociación/empresa/sede defina usuarios bajo ciertos perfiles o permisos Pruebas de aceptación y de seguridad:

Hecho

RF07 /2

Gestión de usuarios Descripción: Permite establecer los usuarios del sistema según los roles y las sedes/empresas/asociaciones permitidas. Para ello: Registrar, bloquear, reactivar usuarios a partir del módulo "auth" de django y bajo los permisos preasignados a la sede/empresa/asociación que se está administrando. Estas validaciones de los permisos se logra gracias a los:

Componentes para asegurar los recursos de la aplicación

Componentes para asegurar los datos de las empresas (Token de acceso a datos)

Permite visualizar el seguimiento de los motivos de bloqueos y activaciones de los usuarios Permite la actualización del perfil de usuario y contraseña Pruebas de aceptación y de seguridad: 1.

Hecho

RF08 /2

Gestión de sucesos del sistema Descripción: Permite tener el registro de sucesos del sistema que guarde información de las acciones de los usuarios. Para ello: Permite el registro, en archivos logs y tablas de base de datos, de las acciones de los usuarios y las respuestas del sistema durante el uso de la aplicación Permite la visualización de los sucesos filtrados por día.

Hecho

RF09 /2

Recuperar contraseña Descripción: Permite recuperar contraseña del usuario para que pueda iniciar sesión en la aplicación web.

Hecho

Page 123: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

109

Anexo B2 - Registro de riesgos de seguridad (amenazas y vulnerabilidades)

Proyecto: Backengo

Fecha de actualización: __04__/__09__/__2013__

COD Riesgo de seguridad Tipo (A/V)

Probabilidad

Impacto

Prioridad

RS01 Inyección A Alta Alta 1000

RS02 Pérdida de Autenticación y Gestión de Sesiones A Alta Alta 1000

RS03 Secuencia de Comandos en Sitios Cruzados(XSS) A Alta Alta 1000

RS04 Referencia Directa Insegura a Objetos A Alta Alta 1000

RS05 Configuración de Seguridad Incorrecta A Alta Alta 1000

RS06 Exposición de Datos Sensibles A Alta Alta 1000

RS07 Ausencia de Control de Acceso a las Funciones A Alta Alta 1000

RS08 Falsificación de Peticiones en Sitios Cruzados(CSRF)

A Alta Alta 1000

RS09 Uso de Componentes con Vulnerabilidades Conocidas

A Alta Alta 1000

RS10 Redirecciones y reenvíos no validados A Alta Alta 1000

RS11 Repudio A Alta Alta 1000

RS12 Datos incompletos A Alta Alta 1000

RS13 Permisos inconsistentes A Alta Alta 1000

A: Amenza V: Vulnerabilidad

Probabilidad: Alta, Media, Baja

Impacto: Alta, Media, Baja

Page 124: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

110

Anexo B3 - Registro de componentes de seguridad

Proyecto: Backengo

Fecha de actualización: __04__/__09__/__2013__

URL de la documentación de los componentes de seguridad:

http://educaci-dns.com:8001/admin/doc

COD Componente de seguridad Riesgos de seguridad

CS01 Django model.objects.filter Inyección

Django request. session

Pérdida de Autenticación y Gestión de Sesiones

django.contrib.auth.authenticate

django.contrib.auth.login

django.contrib.auth.logout.

apps.utils.security.UserToken

django form Secuencia de Comandos en Sitios Cruzados(XSS)

django filter safe

apps.utils.decorators.permission_resource_required

Referencia Directa Insegura a Objetos

apps.utils.security. SecurityKey

Django request. POST

Django.forms. ModelForm

apps.utils.decorators.permission_resource_required

Configuración de Seguridad Incorrecta

apps.utils.security. SecurityKey

Django settings.DEBUG

django.conf.urls.url

Exposición de Datos Sensibles

apps.utils.decorators.permission_resource_required

Ausencia de Control de Acceso a las Funciones

apps.utils.security. SecurityKey

Django csrf_token Falsificación de Peticiones en Sitios Cruzados(CSRF)

crispy form

Uso de Componentes con Vulnerabilidades Conocidas

django.conf.urls.url Redirecciones y reenvíos no validados

apps.utils.decorators.permission_resource_required

Page 125: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

111

Anexo B4 – Arquitectura de la aplicación

1. Información general

Código y Nombre del proyecto: Backengo

Desarrollo de un Backend web seguro para Django

2. Historial de revisiones

Versión - Fecha - Elaborado por

1.0 04/04/2013 – Angel Sullón

3. Arquitectura de la aplicación MTV (equivalente a MVC)

Capa Tecnología Función

Modelo: M Django Model Entidades y mapeamientos

Django Manager Extiende utilitarios del Model

Django Test/Unit Test Pruebas unitarias del modelo

Vista: V Django View Django Form

Controlador de solicitudes y respuestas Reglas de negocio y restricciones

SAD Backend Solicitudes y respuestas con AJAX Restricciones de seguridad Logs Mensajería y Notificaciones

Django Test Pruebas de integración de las vistas y de los formularios

Template: T Django Template Interfaces gráficas de usuario para las entradas de datos y mostrar resultados

Bootstrap Diseño responsivo multidispositivo

JQUERY Utilitarios diversos

AJAX+ JSON Solicitudes y respuestas asíncronas

SAD Frontend Solicitudes y respuestas con AJAX Generación de objetos HTML en tiempo de ejecución Hojas de estilos personalizados

Selenium Pruebas funcionales en la Web

Page 126: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

112

Anexo B5 – Estándares de desarrollo

1. Información general

Código y Nombre del proyecto: Backengo

2. Historial de revisiones

Versión - Fecha - Elaborado por

1.0 04/04/2013 – Angel Sullón

3. Términos de definición de identificadores

ID Término Ejemplo

Proyecto <nombre_proyecto> agil_cont

Paquetes <nombre_carpeta> catalogo_productos

Base de datos <nombre_db> agil_cont_db

Tablas <prefix_nombre_tabla> common_natural_person

Atributo PK id id

Atributo <nombre_atributo> functional_code

Atributo FK <tabla>_id natural_person_id

Paquetes <nombre_carpeta> catalogo_productos

Clases <NombreClase><NombreCapa/vacio> class NaturalPerson

Variables <nombre_variable> functional_code

Contantes <NOMBRE_CONSTANTE> DEFAULT="DNI"

Método <nombre_metodo>(var_nombre) def add(); def edit(); def delete(); def get_by_id(id); def get_list_by_filter(filter);

Enumerators <NOMBRE_ENUM> DEFAULT="DNI" CE="CE" OTHERS="OTHERS" IDENTITY_ CHOICES = ( (DEFAULT, "D.N.I."), (CE, "C.E."), (OTHERS, "Otro.") )

Archivos <nombre_pagina>.<py/html> natural_person.html

Interfaces I<NombreClase><NombreCapa/vacio> INaturalPersonService

Page 127: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

113

Anexo B7 – Prototipos principales

Proyecto: Backengo

Módulo: Backend, app: accounts

Fecha:14/08/2013

Requisito 1: Mostar información resumida del proyecto

Funcionalidad: Muestra la página de inicio del proyecto

Aprobado por:

Documentación en http://backenddj-model.appspot.com/BackendDJ-20140514/index.htm

El código fuente puede descargar gratuitamente de: https://github.com/submitconsulting/backenddj y https://github.com/submitconsulting/backengo (versión actual)

ui 1-index.html

Page 128: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

114

Proyecto: Backengo

Módulo: Backend, app: accounts

Fecha:14/08/2013

Requisito 2: Ingreso al sistema

Funcionalidad: Incia sesión de usuario

Aprobado por:

ui 2-login.html

Page 129: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

115

Proyecto: Backengo

Módulo: Backend, app: accounts

Fecha:14/08/2013

Requisito 3: Apertura de Cuentas del sistema

Funcionalidad: Registra nuevo usuario

Aprobado por:

ui 3-signup.html

Page 130: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

116

Proyecto: Backengo

Módulo: Backend, app: accounts

Fecha:14/08/2013

Requisito 4: Restablecer contraseña

ui 4-password_reset.html

ui 5-password_reset-done.html

Page 131: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

117

Funcionalidad: Reestablace contraseña del usuario

Aprobado por:

ui 6-reset

ui 7-reset-done

Page 132: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

118

Proyecto: Backengo

Módulo: Backend, app: accounts

Fecha:14/08/2013

Requisito 5: Elegir sede y módulo

Funcionalidad: Permite elegir empresa y módulo a administrar

Aprobado por:

ui 8-choice_headquar.html

ui 11-dashboard.html

Page 133: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

119

Proyecto: Backengo

Módulo: Backend, app: accounts

Fecha:14/08/2013

Requisito 6: Agregar nueva empresa y nueva asociación al usuario actual

Funcionalidad:

Aprobado por:

ui 9-add_enterprise.html

Page 134: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

120

Proyecto: Backengo

Módulo: Backend, app: accounts

Fecha:14/08/2013

Requisito 7: Editar perfil del usuario

Funcionalidad:

Aprobado por:

ui 10-profile_edit.html

Page 135: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

121

Proyecto: Backengo

Módulo: Backend, app: space

Fecha:14/08/2013

Requisito 8: Editar datos de la asociación

Funcionalidad:

Aprobado por:

ui 12-edit_current.html

Page 136: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

122

Proyecto: Backengo

Módulo: Backend, app: space

Fecha:14/08/2013

Requisito 9: Gestión de empresas

ui 13.1-index.html

ui 13.2-add.html

Page 137: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

123

Funcionalidad:

Aprobado por:

ui 14-edit_current.html

Page 138: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

124

Proyecto: Backengo

Módulo: Backend, app: space

Fecha:14/08/2013

Requisito 10: Gestión de sedes

Funcionalidad:

Aprobado por:

ui 15.1-index.html

ui 15.2-add.html

Page 139: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

125

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 11: Gestión de usuarios

ui index.html

Page 140: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

126

ui add.html

ui person_search.html

Page 141: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

127

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 12: Gestión de recursos del sistema

Funcionalidad:

Aprobado por:

ui index.html

ui add.html

Page 142: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

128

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 13: Gestión de perfiles de usuario

Funcionalidad:

Aprobado por:

ui index.html

ui add.html

Page 143: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

129

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 14: Configuración de privilegios de perfiles de usuario

Funcionalidad:

Aprobado por:

ui permissions_edit.html

Page 144: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

130

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 15: Gestión de módulos del sistema

Funcionalidad:

Aprobado por:

ui index.html

ui add.html

Page 145: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

131

Proyecto: Backengo

Módulo: Backend, app: space

Fecha:14/08/2013

Requisito 16: Gestión de soluciones o servicios SaaS

Funcionalidad:

Aprobado por:

ui 21.1-index.html

ui 21.2-add.html

Page 146: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

132

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 17: Configuración de planes del sistema

Funcionalidad:

Aprobado por:

ui plans_edit

Page 147: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

133

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 18: Gestión de menús dinámicos del sistema

Funcionalidad:

Aprobado por:

ui index.html

ui add.html

Page 148: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

134

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 19: Configuración del sistema

Funcionalidad:

Aprobado por:

ui basic.html

Page 149: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

135

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 20: Gestión de copias de seguridad de base de datos

Funcionalidad:

Aprobado por:

ui index.html

Page 150: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

136

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 21: Seguimiento de accesos al sistema

Funcionalidad:

Aprobado por:

ui index.html

Page 151: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

137

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 22: Seguimiento de auditoria

Funcionalidad:

Aprobado por:

ui index.html

ui list.html

Page 152: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

138

Proyecto: Backengo

Módulo: Backend, app: sad

Fecha:14/08/2013

Requisito 23: Seguimiento de log del sistema

Funcionalidad:

Aprobado por:

ui index.html

ui list.html

Page 153: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

139

Proyecto: Backengo

Módulo: Backend, app: params

Fecha:14/08/2013

Requisito 24: Gestión de localidades

Funcionalidad:

Aprobado por:

ui index.html (report_pre)

ui add.html

ui report.html

Page 154: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

140

Anexo B8 – Diseño del sistema

1 INFORMACIÓN GENERAL

Código y Nombre del proyecto: Backengo

2 HISTORIAL DE REVISIONES

Versión - Fecha

1.0 – 12-12-13

3 ACTUALIZACIONES IMPORTANTES

4 LINKS DE DESCARGA O DE CONSULTA

Modelo: http://backenddj-model.appspot.com/BackendDJ-20140514/index.htm

Scripts

5 ESTRUCTURA DEL MODELO

Módulo Backend: Este módulo consta de las siguientes aplicaciones:

---Modelo del dominio

Page 155: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

141

--- ---params

--- --- ---Diagrama de entidades

--- ---sad

class params

backenddj

Locality

- is_active: Boolean

- location: Text

- modified_in: DateTime

- msnm: Float

- name: Char

- registered_at: DateTime

- utm: Char

Person

- birth_date: Date

- first_name: Char

- identity_num: Char

- last_name: Char

- modified_in: DateTime

- photo: Image

- registered_at: DateTime

Datos comunes de las personas naturales

(Clientes, Cta Ctes, Alumnos, Empleados,

etc.) y jurídicas (Clientes, Proveedores, etc )

LocalityType

- name: Char

«enumeration»

IDENTITY_TYPES

DEFAULT = DNI

CE = Carnet de extra...

PART_NAC = Partida de naci...

OTHERS = Otros

+identity_type

0..*

+locality_type

0..1

Nombre:

Paquete:

Versión:

Autor:

params

params

1.0

Asullom

Page 156: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

142

--- --- ---Diagrama de entidades

--- ---space

--- --- ---Diagrama de entidades

class sad

django.contrib

backenddj

space::Headquar(sede)

- address: Text

- is_active: Boolean

- is_main: Boolean

- modified_in: DateTime

- name: Char

- phone: Char

- registered_at: DateTime

auth::User

- date_joined: datetime

- email: string

- first_name: string

- is_active: boolean

- is_staff: boolean

- is_superuser: boolean

- last_login: datetime

- last_name: string

- password: string

- username: string

auth::Group

- name: string

auth::Permission

- codename: string

- name: string

django::ContentType

- app_label: string

- model: string

- name: string

Menu

- description: Text

- icon: Char

- is_active: Boolean

- pos: Integer

- title: Char

- url: Char

UserProfileHeadquar

- registered_at: DateTime

«enumeration»

MODULES

WEB = Web informativa

VENTAS = Ventas

BACKEND = Backend Manager

equivale a Categoría del

Recurso

name=table name

app_label= app o module

model=model o controller

Aqui van las acciones: add,

change, delete convertidos en

recursos de la forma

/<app>/<controller>/<action>/

Equivale a Perfi l

Module

- description: Text

- icon: Char

- is_active: Boolean

- name: Char

los permisos del usuario referente a la

manipulación de información de la sede.

Se le da al usuario acceso a una sede tantos

perfi les(group) sea necesario: el grupo que

es asignado, automáticamente debe asignar

en user-groups

user-groups

los permisos del usuario

referente a los recursos(perm)

del sistema a través de Group.

Filtar los permisos de los

UserProfi le*.

Group-Permissions

los permisos (recursos+acciones)

definidos para el grupo=RecursoPerfi l

User-User_Permissions

nunca usar esta relacion, todo

se manejará a través de grupos

space::Enterprise

- is_active: Boolean

- logo: Image

- modified_in: DateTime

- name: Char

- registered_at: DateTime

- tax_id: Char

UserProfileEnterprise

- group: Group

- registered_at: DateTime

Análogo a

UserProfi leHeadqu

art pero para

Empresas

space::Solution

- description: Text

- is_active: Boolean

- name: Char

UserProfileAssociation

- group: Group

- registered_at: DateTime

space::Association

- is_active: Boolean

- logo: Image

- modified_in: DateTime

- name: Char

- registered_at: DateTime

Análogo a

UserProfi leHeadquart

pero para Asociación

Profile

- last_headquar_id: Char

- last_module_id: Char

params::Person

- birth_date: Date

- first_name: Char

- identity_num: Char

- last_name: Char

- modified_in: DateTime

- photo: Image

- registered_at: DateTime

extension security on cloud

0..*

1

+group_set

0..*

+permissions 0..*

+user_set

0..*

+groups0..*

+user_set

0..*

+user_permissions

0..*

0..*

1

0..*

+user 1

0..*

+permission 1

0..*

1

0..*

+user

1

0..*

+parent

0..1

0..*

1

+permission_set

0..*

+content_type 1

0..1

+user

1

0..*0..1

+initial_groups_module_set

0..*

+initial_groups

0..*

+module_set 0..*

+groups0..*

0..*

0..1

0..*

+group1

0..*

+user1

+module_set

0..*

+solutions

0..*

0..1

+person 1

0..*

0..1

Nombre:

Paquete:

Versión:

Autor:

sad

sad

1.0

Asullom

Page 157: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

143

---Modelo de clases. Está dividido en dos capas

--- ---Models Layer

class space

backenddj

Enterprise

- is_active: Boolean

- logo: Image

- modified_in: DateTime

- name: Char

- registered_at: DateTime

- tax_id: Char

Headquar(sede)

- address: Text

- is_active: Boolean

- is_main: Boolean

- modified_in: DateTime

- name: Char

- phone: Char

- registered_at: DateTime

params::Locality

- is_active: Boolean

- location: Text

- modified_in: DateTime

- msnm: Float

- name: Char

- registered_at: DateTime

- utm: Char

«enumeration»

TYPES

GOVERMENT = Gobierno

PRIVATE = Privada

MIXED = Mixta

OTHERS = Otros

Example:

UPeU, UNI, UNMSM, etc.

Association

- is_active: Boolean

- logo: Image

- modified_in: DateTime

- name: Char

- registered_at: DateTime

Example:

UPeU Lima, UPeU Juliaca, UPeU Tarapoto, etc.

Permite que el empresario pueda manejar varias sedes y pertenecer a una o más asociaciones

IMPORTANTE: Una empresa existe si tiene una o más sedes, todo se trabaja en función a la sede (Headquart)

Solution

- description: Text

- is_active: Boolean

- name: Char

+type_e

0..*0..1

0..*

0..1

0..*

0..1

0..*

+type_a 1

+headquar_set

0..*

+locality

0..1

0..*

1

Nombre:

Paquete:

Versión:

Autor:

space

space

1.0

Asullom

Page 158: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

144

--- --- ---params

--- --- --- ---Diagrama de clases de diseño

--- --- --- --- ---Ejemplo completo del diagrama (explica las relaciones a detalle)

class params/models.py

backenddj

Model

«models.py»

Locality

+ __unicode__( ) : self.name,self.location

Model

LocalityType

+ __unicode__( ) : self.name

Person

+ __unicode__( ) : self.first_name

+locality_set 0..*

+locality_type 0..1

Nombre:

Paquete:

Versión:

Autor:

params/models.py

params/models.py

1.0

Asullom

Page 159: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

145

--- --- ---sad

--- --- --- ---Diagrama de clases de diseño

--- --- ---space

--- --- --- ---Diagrama de clases de diseño

class params.models

params/models.py::LocalityType

+ __unicode__(self : ) : self.name

«models.py»

params/models.py::Locality

+ __unicode__(self : ) : self.name,self.location

Seguir las técnicas de codeo del ejemplo para Locality

en params.models.py y la guía pep8

django.db.models::Model

+ delete() : Entity

+ mucho_más() : void

+ objects.fi lter(condition1 : , conditionN : ) : objects<Entity>

+ objects.get(id :int) : Entity

+ save() : Entity+locality_set 0..*

+locality_type 0..1

class sad/models.py

backenddj

Module

+ __unicode__( ) : self.name

Menu

+ __unicode__( ) : self.title

UserProfileHeadquar

UserProfileEnterprise

UserProfileAssociation

space/models.py::Solution

+ __unicode__( ) : self.name

django.contrib.auth.models::Group

+ __unicode__( ) : self.last_name

django.contrib.auth.models::

Permission

+ __unicode__( ) : self.last_name

django.contrib.auth.models::User

+ __unicode__( ) : self.username

space/models.py::Headquar(sede)

+ __unicode__( ) : self.name

space/models.py::Association

+ __unicode__( ) : self.name

space/models.py::Enterprise

+ __unicode__( ) : self.name

django.contrib.auth.models::

ContentType

+ __unicode__( ) : self.last_name

Profile

+ __unicode__( ) : self.user.username

params/models.py::Person

+ __unicode__( ) : self.first_name

+profile

0..1+user

1

+headquar_set 0..*

+enterprise 1

+association_set 0..*

+solution

0..1

+enterprise_set 0..*

+solution 0..1

+module_set

0..*

+solutions 0..*

+module_set 0..*

+groups

0..*

+initial_groups_module_set

0..*

+initial_groups

0..*

+menu_set 0..*

+parent 0..1

+headquar_set

0..*

+association

0..1

+permission_set 0..*

+content_type 1

+profile 0..1

+person 1

+menu_set

0..*

+permission

0..1

+user_set 0..*

+groups 0..*

+userprofileheadquart_set 0..*

+group

1

+userprofileenterprise_set

0..*

+group

1

+userprofileassociation_set

0..*+group

1

+userprofileheadquart_set

0..*

+user

1

+userprofileheadquart_set

0..*

+headquart 1

+group_set 0..*

+permissions

0..*

Nombre:

Paquete:

Versión:

Autor:

sad/models.py

sad/models.py

1.0

Asullom

Page 160: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

146

--- ---Views Layer

--- --- ---accounts

--- --- --- ---Diagrama de clases de diseño

Metodo Notas Parámetro

s

add_enterprise() Enterprise in

render_to_response("accounts/add_enterprise.ht

ml", c), Redirect.to(request,

"/accounts/choice_headquar/")

Public

1° Inicializar Enterprise

2° Obtener el listado de Solution activos

ordenados por "id" y mostrarlos en el template

add_enterprise.html

3° Obtener Association.TYPES y mostrarlos en

el template add_enterprise.html

-Si method="POST":

rq [in]

request

class space/models.py

backenddj

Headquar(sede)

+ __unicode__( ) : self.name

Association

+ __unicode__( ) : self.nameEnterprise

+ __unicode__( ) : self.name

Solution

+ __unicode__( ) : self.name

Model

«models.py»

params/models.py::Locality

+ __unicode__( ) : self.name,self.location

+headquart_set

0..*+locality

0..1

+enterprise_set 0..*

+solution 0..1

+association_set 0..*

+solution 0..1

+headquar_set 0..*

+enterprise 1

+headquar_set 0..*

+association 0..1

Nombre:

Paquete:

Versión:

Autor:

space/models.py

space/models.py

1.0

Asullom

class accounts/v iews.py

#login

+ choice_headquar(request, field, value) : page< HeadquarLite> in render_to_response("accounts/choice_headquar.html", c)

+ load_access(request, headquar_id, module_id) : HttpResponseRedirect("/accounts/choice_headquar/") | Redirect.to("/mod_<name>/dashboard/")

+ login_sys(request) : render_to_response("accounts/login.html", c), HttpResponseRedirect("/accounts/choice_headquar/") | load_access

+ logout_sys(request) : HttpResponseRedirect("/")

+ user_profile_edit(request) : User in render_to_response("accounts/profile_edit.html", c), to("/accounts/choice_headquar/")

#registro de las cuentas de usuario

+ add_enterprise(request) : Enterprise in render_to_response("accounts/add_enterprise.html", c), Redirect.to(request, "/accounts/choice_headquar/")

+ signup_sys(request) : Person in render_to_response("accounts/signup.html", c), redirect("/accounts/login/")

Nombre:

Paquete:

Versión:

Autor:

accounts/views.py

accounts/views.py

1.0

Asullom

Page 161: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

147

1° Obtener User actual con request.user

2° Si existe otro Association con el mismo

"name", retornar exception informando que el

"name" del Association ya existe

3° Salvar Association

4° Si existe otro Enterprise con el mismo

"name", retornar exception informando que el

"name" del Enterprise ya existe

5° Si existe otro Enterprise con el mismo

"tax_id", retornar exception informando que el

"tax_id" del Enterprise ya existe

6° Salvar Enterprise

7° Crear una Headquar con el name="Principal",

con la Association y Enterprise recien creadas

8° Salvar Headquar

9° Salvar los Group de la sede (de acuerdo a

la Solution elegida) en UserProfileHeadquar

10° Salvar los Group de la empresa (de acuerdo

a la Solution elegida) en

UserProfileEnterprise

11° Salvar los Group de la asociación (de

acuerdo a la Solution elegida) en

UserProfileAssociation

12° Salvar los Group de la sede, empresa y

asociación, evitando Group repetidos, usando

User.groups.add(Group)

#Si hay algun exception mantener datos

enviados en el template add_enterprise.html

sin hacer cambios en la DB

signup_sys() Person in

render_to_response("accounts/signup.html", c),

redirect("/accounts/login/")

Public

1° Si el usuario ya está is_authenticated,

intentar cargar el último acceso cargando

directamente la sede y el módulo anterior,

sino cargar

HttpResponseRedirect("/accounts/choice_headqua

r/")

2° Inicializar Person

3° Obtener el listado de Solution activos

ordenados por "id" y mostrarlos en el template

signup.html

4° Obtener Association.TYPES y mostrarlos en

el template signup.html

5° Obtener el Person.DEFAULT de

Person.IDENTITY_TYPES y mostrarlos en el

template signup.html

-Si method="POST":

1° Si existe otro User con el mismo

"username", retornar exception informando que

el "username" del User ya existe

2° Si existe otro User con el mismo "email",

retornar exception informando que el "email"

del User ya existe

3° Salvar User

4° Si existe otro Person con el mismo

"identity_num" y "identity_type", retornar

exception informando que ya existe un Person

con "identity_num" y "identity_type"

5° Si existe otro Person con el mismo

"first_name", "last_name" , "identity_num" y

"identity_type", retornar exception informando

que el Person ya existe. Use normalize

6° Salvar Person

7. Salvar Profile con User del 3er paso y con

Person del 6to paso

8° Si existe otro Association con el mismo

"name", retornar exception informando que el

"name" del Association ya existe

9° Salvar Association

10° Si existe otro Enterprise con el mismo

"name", retornar exception informando que el

"name" del Enterprise ya existe

11° Si existe otro Enterprise con el mismo

"tax_id", retornar exception informando que el

"tax_id" del Enterprise ya existe

12° Salvar Enterprise

13° Crear una Headquar con el

name="Principal", con la Association y

Enterprise recien creadas

14° Salvar Headquar

15° Salvar los Group de la sede (de acuerdo a

la Solution elegida) en UserProfileHeadquar

16° Salvar los Group de la empresa (de acuerdo

a la Solution elegida) en

rq [in]

request

Page 162: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

148

UserProfileEnterprise

17° Salvar los Group de la asociación (de

acuerdo a la Solution elegida) en

UserProfileAssociation

18° Salvar los Group de la sede, empresa y

asociación, evitando Group repetidos, usando

User.groups.add(Group)

#Si hay algun exception mantener datos

enviados en el template signup.html sin hacer

cambios en la DB

#login

Metodo Notas Parámetr

os

choice_headquar() page< HeadquarLite> in

render_to_response("accounts/choice_headquar

.html", c)

Public

1° Obtener el listado paginado de HeadquarLite

filtrado según los parámetros enviados,

ordenado por "-association__name","-

enterprise__name","-id" y mostrar en el

template choice_headquar.html

HeadquarLite={

"association": headquar.association,

#Asociaciones del user en la cuales colabora

"enterprise": headquar.enterprise, #Empresas

de del user en la cuales colabora

"headquar": headquar, #Sedes del user en la

cuales colabora

"modules": module_list, #módulos a la cual el

user tiene acceso

"groups": group_list, #perfiles del usuario

}

rq [in]

request

str [in]

field

str [in]

value

load_access()

HttpResponseRedirect("/accounts/choice_headq

uar/") |

Redirect.to("/mod_<name>/dashboard/")

Public

1° Validar que la petición no sea con ajax,

sino, informar que ESTA OPERACION NO DEBE SER

CARGADO CON AJAX, Presione F5

2° Validar si Headquar existe en la BD, sino,

retornar exception informando que Headquar no

fué encontrado

3° Validar si Module existe en la BD, sino,

retornar exception informando que Module no

fué encontrado

4° Si el user no es superuser: (si

is_superuser tiene acceso a todo)

4.1 Validar el usuario tiene acceso a la

Headquar, sino, retornar exception informando

que No tiene privilegio para ingresar a la

Headquar

4.2 Validar el usuario tiene acceso al

Module del Headquar del paso 4.1, sino,

retornar exception informando que No tiene

privilegio para ingresar al Module

5° Cargar permisos de datos para el usuario:

DataAccessToken.set_association_id(req

uest, headquar.association.id)

DataAccessToken.set_enterprise_id(requ

est, headquar.enterprise.id)

DataAccessToken.set_headquar_id(reques

t, headquar.id)

6° Intentar Obtener Profile del User para

Salvar Profile indicando la ultima sede y el

ultimo módulo a la que ingresó el User

(last_headquar_id = headquar_id,

last_module_id = module_id), si el User no

tiene Profile, crearle uno nuevo.

7° Cargar dashboard del módulo seleccionado

rq [in]

request

str [in]

headquar_

id

str [in]

module_id

login_sys()

render_to_response("accounts/login.html", c),

HttpResponseRedirect("/accounts/choice_headq

uar/") | load_access

Public

1° Inicializar User

2° Si el usuario ya está is_authenticated,

intentar cargar el último acceso cargando

directamente la sede y el módulo anterior (de

Profile), sino cargar

HttpResponseRedirect("/accounts/choice_headqua

r/")

-Si method="POST":

1° Recuperar el d.username si el usuario está

logeándose mediante email.

rq [in]

request

Page 163: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

149

2° Autenticar al usuario usando

django.contrib.auth.authenticate(username=d.us

ername, password=password) y

django.contrib.auth.login, sino, retornar

exception informando que la Contaseña no es

válido, o el usuario no existe o no está

activo.

3° Salvar Access con los datos requeridos

4° Si la variable "next" no es nulo ni vacío

cargar al método indicado en dicha variable.

5° Cargar en Message el saludo de bienvenida.

6° Intentar cargar el último acceso cargando

directamente la sede y el módulo anterior,

sino cargar

HttpResponseRedirect("/accounts/choice_headqua

r/")

#Si hay algun exception mantener datos

enviados en el template login.html

#El input para login y passwd solo debe

permitir valores alpanuméricos más la @,

evitando la posibilidad de codigo injection

SQL

#Validar {% csrf_token %}

logout_sys() HttpResponseRedirect("/")

Public

1° Cerrar sesión con

django.contrib.auth.logout(request)

rq [in]

request

user_profile_edit() User in

render_to_response("accounts/profile_edit.html

", c), to("/accounts/choice_headquar/")

Public

1° Obtener User actual con request.user

2° Intentar obtener Profile con User.id del

paso 1° si existe, sino dejar pasar sin

obtener datos del Profile del User

3° Obtener el listado de Group ya asignados de

User para las Headquar ( si tuviese) en

UserProfileHeadquar y mostrarlos en el

template profile_edit.html

4° Obtener el listado de Group ya asignados de

User para las Enterprise ( si tuviese) en

UserProfileEnterprise y mostrarlos en el

template profile_edit.html

5° Obtener el listado de Group ya asignados de

User para las Association ( si tuviese) en

UserProfileAssociation y mostrarlos en el

template profile_edit.html

6° Obtener Person.IDENTITY_TYPES y mostrarlos

en el template profile_edit.html

-Si method="POST":

1° Si existe otro User con el mismo "email",

retornar exception informando que el "email"

del User ya existe

2° Salvar User

3° Obtener Person a través de User.profile,

sino Salvar un Person nuevo

4. Obtener Profile a través de User, sino

Salvar un Profile nuevo con el User del paso

2° y Person del paso 3°

5° Si existe otro Person con el mismo

"first_name", "last_name" , "identity_num" y

"identity_type", retornar exception informando

que el Person ya existe. Use normalize

6° Si existe otro Person con el mismo

"identity_num" y "identity_type", retornar

exception informando que ya existe un Person

con "identity_num" y "identity_type"

7° Volver a Salvar Person con los datos

recibidos del formulario

#Si hay algun exception mantener datos

enviados en el template profile_edit.html sin

hacer cambios en la DB

rq [in]

request

--- --- ---mod_backend

--- --- --- ---Diagrama de clases de diseño

Page 164: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

150

Metodo Notas Parámetros

mod_backend_dashboard()

render_to_response("mod_backend/dashboard.html",

c)

Public

rq [in]

request

--- --- ---params

--- --- --- ---Diagrama de clases de diseño

Metodo Notas Parámetros

locality_add() Locality in

render_to_response("params/locality/add.html",

c), to_action("index")

Public

1° Inicializar Locality

2° Obtener el listado de todos los

LocalityType ordenado por name para

mostrar en el template add.html

-Si method="POST":

1° Si existe otro Locality con el mismo

rq [in] request

class mod_backend/v iews.py

#mod_backend_dashboard

+ mod_backend_dashboard(request) : render_to_response("mod_backend/dashboard.html", c)

Nombre:

Paquete:

Versión:

Autor:

mod_backend/views.py

mod_backend/views.py

1.0

Asullom

Page 165: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

151

name, retornar exception informando que el

name del Locality ya existe

#Si hay algun exception mantener datos

enviados en el template add.html

2° Salvar Locality

Código inicial:

d = Locality()

if request.method == "POST":

...

if normalize("NFKD", u"%s" %

d.name).encode("ascii", "ignore").lower()

in list(

normalize("NFKD", u"%s" %

col["name"]).encode("ascii",

"ignore").lower() for col in

Locality.objects.values("name").exclude(id

= d.id) #puede .filter()

):

raise

Exception(_("Locality <b>%(name)s</b>

name's already in use.") %

{"name":d.name})

d.save()

locality_type_list =

LocalityType.objects.all()

c = {

"page_module":_("Locality"),

"page_title":_("New locality."),

"d":d, #Si hay algun exception

mantener datos enviados en el template

"locality_type_list":locality_type_list,

}

locality_delete() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave

es incorrecta

2° Validar si Locality existe en la BD,

sino, retornar exception informando que

Locality no fué encontrado

3° Validar si Locality no tiene

dependencias con otras tablas, sino,

retornar exception informando que Locality

está asignado en la tabla donde fué

encontrada

4° Eliminar Locality

Código inicial:

id = Security.is_valid_key(request, key,

"locality_del")

d = get_object_or_404(Locality, id=id)

if d.headquart_set.count() > 0:

raise Exception( ("Localidad

<b>%(name)s</b> está asignado en

headquart.") % {"name":d.name} )

d.delete()

rq [in] request

str [in] key

locality_edit() Locality in

render_to_response("params/locality/edit.html",

c), to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave

es incorrecta

2° Validar si Locality existe en la BD,

sino, retornar exception informando que

Locality no fué encontrado

3° Obtener el listado de todos los

LocalityType ordenado por name para

mostrar en el template edit.html

-Si method="POST":

1° Si existe otro Locality con el mismo

name, retornar exception informando que el

name del Locality ya existe

#Si hay algun exception mantener datos

enviados en el template edit.html

2° Salvar Locality

Código inicial:

id = Security.is_valid_key(request, key,

"locality_upd")

d = get_object_or_404(Locality, id=id)

if request.method == "POST":

...

if normalize("NFKD", u"%s" %

rq [in] request

str [in] key

Page 166: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

152

d.name).encode("ascii", "ignore").lower()

in list(

normalize("NFKD", u"%s" %

col["name"]).encode("ascii",

"ignore").lower() for col in

Locality.objects.values("name").exclude(id

= d.id) #puede .filter()

):

raise

Exception(_("Locality <b>%(name)s</b>

name's already in use.") %

{"name":d.name})

d.save()

locality_type_list =

LocalityType.objects.all()

c = {

"page_module":_("Locality"),

"page_title":_("Update locality."),

"d":d,#Si hay algun exception mantener

datos enviados en el template

"locality_type_list":locality_type_list,

}

locality_index() page< Locality> in

render_to_response("params/locality/index.html",

c)

Public

1° Obtener el listado paginado de Locality

filtrado y ordenado según los parámetros

enviados y mostrar en el template

index.html

Código inicial:

value_f = "" if value == "None" else value

column_contains = u"%s__%s" %

(field,"contains")#WHERE column LIKE %an%

locality_list =

Locality.objects.filter(**{

column_contains: value_f

}).order_by(order)

paginator = Paginator(locality_list, 25)

locality_page =

paginator.page(request.GET.get("page"))

c = {

"page_module":_("Locality"),

"page_title":_("Localities list."),

"locality_page":locality_page,

"field":field,

"value":value.replace("/", "-"),

"order":order,

}

rq [in] request

str [in] field

str [in] value

str [in] order

locality_report() objects< Locality> in

render_to_response("params/locality/report.html",

c)

Public

1° Obtener el listado de Locality filtrado

y ordenado según los parámetros enviados y

mostrar en el template report.html

Código inicial:

value = "" if value == "None" else value

column_contains = u"%s__%s" %

(field,"contains")

locality_list =

Locality.objects.filter(**{

column_contains: value }).order_by(order)

c = {

"page_module":_("Locality"),

"page_title":_("Localities report."),

"locality_list":locality_list,

}

rq [in] request

str [in] field

str [in] value

str [in] order

locality_state() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave

es incorrecta

2° Validar si Locality existe en la BD,

sino, retornar exception informando que

Locality no fué encontrado

3° Actualizar el campo Locality.is_active

para False/True

Código inicial:

id = Security.is_valid_key(request, key,

"locality_%s" % state )

d = get_object_or_404(Locality, id=id)

d.is_active = (True if state ==

"reactivar" else False)

d.save()

rq [in] request

str [in] state

str [in] key

Page 167: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

153

--- --- --- --- ---Ejemplo completo del diagrama (explica las relaciones a detalle)

--- --- ---sad

--- --- --- ---Diagrama de clases de diseño

class params.v iews

params/v iews.py::#locality

+ locality_add(request) : Locality in render_to_response("params/locality/add.html", c), to_action("index")

+ locality_delete(request, key) : to_action("index")

+ locality_edit(request, key) : Locality in render_to_response("params/locality/edit.html", c), to_action("index")

+ locality_index(request, field, value, order) : page< Locality> in render_to_response("params/locality/index.html", c)

+ locality_report(request, field, value, order) : objects< Locality> in render_to_response("params/locality/report.html", c)

+ locality_state(request, state, key) : to_action("index")

«package»

django.shortcuts::Package

+ redirect(forward) : void

+ render_to_response(template, data, context) : void

django.http::

HttpResponse

- contents: String

- status_code

- template: List

django.http::

HttpResponseRedirect

- url: String

python::Context

- data: Dictionary

python::Template

+ render(context) : String

python::RequestContext

- request: HttpRequest

apps.utils.messages.py::Message

+ critical(request, msg, audit) : void

+ debug(request, msg, audit) : void

+ error(request, msg, audit) : void

+ info(request, msg, audit) : void

- set_msg(request, type, msg, audit) : void

+ warning(request, msg, audit) : void

templatetags::notify.py

+ get_notify(request) : message[]

python::logging

Seguir las técnicas de codeo

del ejemplo para Locality en

params.views.py y la guía

pep8

Model

params/models.py::LocalityType

+ __unicode__(self) : self.name

Model

«models.py»

params/models.py::Locality

+ __unicode__(self) : self.name,self.location

django.core.paginator::Paginator

+ page(current_page) : page

+ Paginator(list, per_page) : Paginator

python::Exception

apps.utils::decorators.py

+ is_admin(view_func) : wrapped

+ permission_resource_required(function, template_denied_name) : decorator(view_func)

- permission_resource_required_decorator(template_denied_name) : decorator(view_func)

templatetags::app_security.py

+ key(id, action_name) : Security.get_key(id, action_name)

apps.utils.security.py::Security

+ get_key(id, action_name) : string

+ is_valid_key(request, key_value, action_name) : void

apps.utils.security.py::Redirect

+ to(request, route, params) : return methodToCall(request) | return redirect(path)

+ to_action(request, action_name, params) : return methodToCall(request) | return redirect(path)

django.db::transaction.py

+ commit_on_success() : decorator(view_func)

django.contrib::

messages.py

+locality_set 0..*

+locality_type 0..1

Nombre:

Paquete:

Versión:

Autor:

params.views

locality (ejemplo completo)

1.0

Asullom

Page 168: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

154

#group Metodo Notas Parámetro

s

group_add() Group in

render_to_response("sad/group/add.html", c),

to_action("index")

Public

1° Inicializar Group

-Si method="POST":

1° Si existe otro Group con el mismo "name",

retornar exception informando que el "name"

del Group ya existe

#Si hay algun exception mantener datos

enviados en el template add.html

2° Salvar Group

rq [in]

request

group_delete() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Group existe en la BD, sino,

retornar exception informando que Group no

fué encontrado

3° Validar si Group no tiene dependencias

con otras tablas, sino, retornar exception

informando que Group está asignado en la

tabla donde fué encontrada

4° Eliminar Group

rq [in]

request

str [in] key

class sad/v iews.py

#resource (Permission)

+ resource_add(request) : Permission in render_to_response("sad/resource/add.html", c), to_action("index")

+ resource_delete(request, key) : to_action("index")

+ resource_edit(request, key) : Permission in render_to_response("sad/resource/edit.html", c), to_action("index")

+ resource_index(request) : objects< Permission> in render_to_response("sad/resource/index.html", c)

#group

+ group_add(request) : Group in render_to_response("sad/group/add.html", c), to_action("index")

+ group_delete(request, key) : to_action("index")

+ group_edit(request, key) : Group in render_to_response("sad/group/edit.html", c), to_action("index")

+ group_index(request) : objects< Group> in render_to_response("sad/group/index.html", c)

+ group_permissions_edit(request) : objects< Group>, objects< Permission> in render_to_response("sad/group/permissions_edit.html", c)

#module

+ module_add(request) : Module in render_to_response("sad/module/add.html", c), to_action("index")

+ module_delete(request, key) : to_action("index")

+ module_edit(request, key) : Module in render_to_response("sad/module/edit.html", c), to_action("index")

+ module_index(request) : objects< Module> in render_to_response("sad/module/index.html", c)

+ module_plans_edit(request) : objects< Module>, objects< Solution> in render_to_response("sad/module/plans_edit.html", c)

+ module_state(request, state, key) : to_action("index")

#menu

+ menu_add(request) : Menu in render_to_response("sad/menu/add.html", c), to_action("index")

+ menu_delete(request, key) : to_action("index")

+ menu_edit(request, key) : Menu in render_to_response("sad/menu/edit.html", c), to_action("index")

+ menu_index(request, field, value, order) : page< Menu> in render_to_response("sad/menu/index.html", c)

+ menu_state(request, state, key) : to_action("index")

#user

+ user_add(request) : User in render_to_response("sad/user/add.html", c), to_action("index")

+ user_add_from_person(request, key) : User in render_to_response("sad/user/add_from_person.html", c), to_action("index")

+ user_delete(request, key) : to_action("index")

+ user_edit(request, key) : User in render_to_response("sad/user/edit.html", c), to_action("index")

+ user_index(request, field, value, order) : page< User> in render_to_response("sad/user/index.html", c)

+ user_person_search(request, field, value) : objects<Person> in render_to_response("sad/user/person_search.html", c)

+ user_state(request, state, key) : to_action("index")

+ user_upload(request) : json < dict>

+ user_view(request, key) : User in render_to_response("sad/user/view.html", c), to_action("index")

Page 169: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

155

group_edit() Group in

render_to_response("sad/group/edit.html", c),

to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Group existe en la BD, sino,

retornar exception informando que Group no

fué encontrado

-Si method="POST":

1° Si existe otro Group con el mismo "name",

retornar exception informando que el "name"

del Group ya existe

#Si hay algun exception mantener datos

enviados en el template edit.html

2° Salvar Group

rq [in]

request

str [in] key

group_index() objects< Group> in

render_to_response("sad/group/index.html", c)

Public

1° Obtener el listado de Group ordenado por

"-id" y mostrar en el template index.html

rq [in]

request

group_permissions_edit() objects< Group>,

objects< Permission> in

render_to_response("sad/group/permissions_edit.ht

ml", c)

Public

1° Obtener la lista de Permission ordenados

por

"content_type__app_label","content_type__mod

el"y mostrar en el template

group_permissions_edit.html

2° Obtener la lista de Group ordenado por "-

id" y mostrar en el template

group_permissions_edit.html

3° En una list[] Obtener los privilegios

asignados en la forma "Permission.id-

Group.id" y mostrar en el template

permissions_edit.html, donde los privilegios

asignados se marcan con check

-Si method="POST":

1° Eliminar los antiguos privilegios usando

Group.permissions.remove(Permission) para

cada par "Permission.id-Group.id" de todos

los request.POST.getlist("privilegios")

2° Salvar los nuevos privilegios marcados

con check en el template

permissions_edit.html. Usar

Group.permissions.add(Permission) para cada

par "Permission.id-Group.id" de todos los

request.POST.get("old_privilegios").split(",

")

#Si hay algun exception no hacer cambios en

la DB

rq [in]

request

#menu Metodo Notas Parámetros

menu_add() Menu in

render_to_response("sad/menu/add.html",

c), to_action("index")

Public

1° Inicializar Menu

2° Obtener el listado de Menu

padres activos y mostrarlos en

el template add.html

3° Obtener el listado de

Permission y mostrarlos en el

template add.html

4° Obtener el listado de

Menu.MODULES y mostrarlos en el

template add.html

-Si method="POST":

#Si hay algun exception mantener

datos enviados en el template

add.html

1° Salvar Menu

rq [in] request

Page 170: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

156

menu_delete() to_action("index")

Public

1° Si no es válido la llave de

seguridad, retornar exception

informando que se ha denegado el

acceso debido a que la llave es

incorrecta

2° Validar si Menu existe en la

BD, sino, retornar exception

informando que Menu no fué

encontrado

3° Validar si Menu no es un menú

inicial

4° Eliminar Menu

rq [in] request

str [in] key

menu_edit() Menu in

render_to_response("sad/menu/edit.html",

c), to_action("index")

Public

1° Si no es válido la llave de

seguridad, retornar exception

informando que se ha denegado el

acceso debido a que la llave es

incorrecta

2° Validar si Menu existe en la

BD, sino, retornar exception

informando que Menu no fué

encontrado

3° Validar si Menu no es un menú

inicial

4° Obtener el listado de Menu

padres activos y mostrarlos en

el template edit.html

5° Obtener el listado de

Permission y mostrarlos en el

template edit.html

6° Obtener el listado de

Menu.MODULES y mostrarlos en el

template edit.html

-Si method="POST":

#Si hay algun exception mantener

datos enviados en el template

edit.html

1° Salvar Menu

rq [in] request

str [in] key

menu_index() page< Menu> in

render_to_response("sad/menu/index.html",

c)

Public

1° Obtener el listado paginado

de Menu filtrado y ordenado

según los parámetros enviados y

mostrar en el template

index.html

rq [in] request

str [in] field

str [in] value

str [in] order

menu_state() to_action("index")

Public

1° Si no es válido la llave de

seguridad, retornar exception

informando que se ha denegado el

acceso debido a que la llave es

incorrecta

2° Validar si Menu existe en la

BD, sino, retornar exception

informando que Menu no fué

encontrado

3° Actualizar el campo

Menu.is_active para False/True

rq [in] request

str [in] state

str [in] key

Page 171: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

157

#module Metodo Notas Parámetr

os

module_add() Module in

render_to_response("sad/module/add.html",

c), to_action("index")

Public

1° Inicializar Module

2° Obtener el listado de Group ordenado por

"name" y mostrarlos en el template add.html

-Si method="POST":

1° Si existe otro Module con el mismo "name",

retornar exception informando que el "name" del

Module ya existe

#Si hay algun exception mantener datos enviados

en el template add.html

2° Salvar Module

3° Salvar los privilegios seleccionados en el

template add.html. Module.groups.add(Group) de

todos los request.POST.getlist("groups")

4° Salvar los privilegios iniciales seleccionados

en el template add.html.

Module.initial_groups.add(Group) de todos los

request.POST.getlist("initial_groups")

rq [in]

request

module_delete() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha denegado

el acceso debido a que la llave es incorrecta

2° Validar si Module existe en la BD, sino,

retornar exception informando que Module no fué

encontrado

3° Validar si Module no tiene dependencias con

otras tablas, sino, retornar exception informando

que Module está asignado en la tabla donde fué

encontrada

4° Eliminar Module

rq [in]

request

str [in]

key

module_edit() Module in

render_to_response("sad/module/edit.html"

, c), to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha denegado

el acceso debido a que la llave es incorrecta

2° Validar si Module existe en la BD, sino,

retornar exception informando que Module no fué

encontrado

4° Obtener el listado de Group y mostrarlos en el

template edit.html

5° Obtener el listado de ids de los Group

asginados al Module y mostrarlos en el template

edit.html

6°Obtener el listado de ids de los Group

Iniciales asginados al Module y mostrarlos en el

template edit.html

7° Obtener el listado de Module.MODULES y

mostrarlos en el template edit.html

-Si method="POST":

1° Si existe otro Module con el mismo "name",

retornar exception informando que el "name" del

Module ya existe

#Si hay algun exception mantener datos enviados

en el template edit.html

2° Salvar Module

3° Eliminar los antiguos privilegios usando

Module.groups.remove(Group) de todos los

request.POST.get("old_grupos_id_list").split(",")

4° Salvar los nuevos privilegios seleccionados en

el template edit.html. Module.groups.add(Group)

de todos los request.POST.getlist("groups")

5° Eliminar los antiguos privilegios iniciales

usando Module.initial_groups.remove(Group) de

todos los

request.POST.get("old_initial_groups_id_list").sp

lit(",")

6° Salvar los nuevos privilegios iniciales

seleccionados en el template edit.html.

Module.initial_groups.add(Group) de todos los

request.POST.getlist("initial_groups")

#Si hay algun exception no hacer cambios en la DB

rq [in]

request

str [in]

key

Page 172: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

158

module_index() objects< Module> in

render_to_response("sad/module/index.htm

l", c)

Public

1° Obtener el listado de Module ordenado por

"module", "-id" y mostrar en el template

index.html

rq [in]

request

module_plans_edit() objects< Module>,

objects< Solution> in

render_to_response("sad/module/plans_edit

.html", c)

Public

1° Obtener la lista de Module activos ordenados

por "module" y mostrar en el template

plans_edit.html

2° Obtener la lista de Solution activos ordenado

por "-id" y mostrar en el template

plans_edit.html

3° En una list[] Obtener los privilegios

asignados en la forma "Solution.id-Module.id" y

mostrar en el template plans_edit.html donde los

privilegios asignados se marcan con check

-Si method="POST":

1° Eliminar los antiguos privilegios usando

Module.solutions.remove(Solution) para cada par

"Solution.id-Module.id" de todos los

request.POST.getlist("privilegios")

2° Salvar los nuevos privilegios marcados con

check en el template plans_edit.html.

Module.solutions.add(Solution) para cada par

"Solution.id-Module.id" de todos los

request.POST.get("old_privilegios").split(",")

#Si hay algun exception no hacer cambios en la DB

rq [in]

request

module_state() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha denegado

el acceso debido a que la llave es incorrecta

2° Validar si Module existe en la BD, sino,

retornar exception informando que Module no fué

encontrado

3° Actualizar el campo Module.is_active para

False/True

rq [in]

request

str [in]

state

str [in]

key

#resource (Permission)

Metodo Notas Parámetro

s

resource_add() Permission in

render_to_response("sad/resource/add.html",

c), to_action("index")

Public

1° Inicializar Permission

-Si method="POST":

1° Resolver "name","model" y "app_label" a

partir de los objetos recibidos del template

add.html

2° Obtener o crear la ContentType con el

"name","model" y "app_label" recibidos del

template add.html

3° Resolver "codename" y "recurso"

4° Si existe otro Permission con el mismo

"codename" para la ContentType retornar

exception informando que el "recurso" ya

existe

5° Salvar Permission

#Si hay algun exception mantener datos

enviados en el template add.html sin hacer

cambios en la DB

rq [in]

request

resource_delete() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

rq [in]

request

Page 173: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

159

incorrecta

2° Validar si Permission existe en la BD,

sino, retornar exception informando que

Permission o Recurso no fué encontrado

3° No permitir eliminar recursos iniciales

4° Validar si Permission no tiene dependencias

con otras tablas, sino, retornar exception

informando que Permission (en forma de

recurso) está asignado en la tabla donde fué

encontrada

5° Eliminar Permission

str [in] key

resource_edit() Permission in

render_to_response("sad/resource/edit.html",

c), to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Permission existe en la BD,

sino, retornar exception informando que

Permission o Recurso no fué encontrado

3° No permitir editar recursos iniciales

-Si method="POST":

1° Resolver "name","model" y "app_label" a

partir de los objetos recibidos del template

edit.html

2° Obtener o crear la ContentType con el

"name","model" y "app_label" recibidos del

template edit.html

3° Resolver "codename" y "recurso"

4° Si existe otro Permission con el mismo

"codename" para la ContentType retornar

exception informando que el "recurso" ya

existe

5° Salvar Permission

#Si hay algun exception mantener datos

enviados en el template edit.html sin hacer

cambios en la DB

rq [in]

request

str [in] key

resource_index() objects< Permission> in

render_to_response("sad/resource/index.html"

, c)

Public

1° Obtener el listado de Permission ordenado

por

"content_type__app_label","content_type__model

" y mostrar en el template index.html.

rq [in]

request

#user

Metodo Notas Parámetro

s

user_add() User in

render_to_response("sad/user/add.html", c),

to_action("index")

Public

1° Inicializar User

2° Obtener el Headquar actual, id =

DataAccessToken.get_headquar_id(request.sess

ion)

3° Obtener el listado de Module activos

asignados a su Enterprise y Asociation del

Headquar actual

4° Obtener el listado de Group

pertenecientes al Module (del 3° paso) y

darle la forma indicada en la IGU y

mostrarlos en el template add.html (de la

forma Module>Group/perfil)

5° Obtener Person.IDENTITY_TYPES y

mostrarlos en el template add.html

-Si method="POST":

1° Si existe otro User con el mismo

"username", retornar exception informando

que el "username" del User ya existe

2° Si existe otro User con el mismo "email",

retornar exception informando que el "email"

del User ya existe

3° Salvar User

4° Si existe otro Person con el mismo

"first_name", "last_name" , "identity_num" y

"identity_type", retornar exception

informando que el Person ya existe. Use

normalize

5° Si existe otro Person con el mismo

rq [in]

request

Page 174: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

160

"identity_num" y "identity_type", retornar

exception informando que ya existe un Person

con "identity_num" y "identity_type"

6° Salvar Person

7. Salvar Profile con User del 3er paso y

con Person del 6to paso

8° Salvar los Group de la sede

(request.POST.getlist("groups_sede")) en

UserProfileHeadquar

9° Salvar los Group de la empresa

(request.POST.getlist("groups_enterprise"))

en UserProfileEnterprise

10° Salvar los Group de la asociación

(request.POST.getlist("groups_association"))

en UserProfileAssociation

11° Salvar los Group de la sede, empresa

yasociación, evitando Group repetidos usando

User.groups.add(Group)

#Si hay algun exception mantener datos

enviados en el template add.html sin hacer

cambios en la DB

user_add_from_person() User in

render_to_response("sad/user/add_from_person.ht

ml", c), to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Person existe en la BD, sino,

retornar exception informando que Person no

fué encontrado

3° Obtener el Headquar actual, id =

DataAccessToken.get_headquar_id(request.sess

ion)

4° Obtener el listado de Module activos

asignados a su Enterprise y Asociation del

Headquar actual

5° Obtener el listado de Group

pertenecientes al Module (del 4° paso) y

darle la forma indicada en la IGU y

mostrarlos en el template

add_from_person.html (de la forma

Module>Group)

6° Obtener Person.IDENTITY_TYPES y

mostrarlos en el template

add_from_person.html

-Si method="POST":

1° Si existe otro User con el mismo

"username", retornar exception informando

que el "username" del User ya existe

2° Si existe otro User con el mismo "email",

retornar exception informando que el "email"

del User ya existe

3° Salvar User

4° Si existe otro Person con el mismo

"first_name", "last_name" , "identity_num" y

"identity_type", retornar exception

informando que el Person ya existe. Use

normalize

5° Si existe otro Person con el mismo

"identity_num" y "identity_type", retornar

exception informando que ya existe un Person

con "identity_num" y "identity_type"

6° Actualizar Person, ahora con los datos

recibidos del formulario

7. Salvar Profile con User del 3er paso y

con Person del 6to paso

8° Salvar los Group de la sede

(request.POST.getlist("groups_sede")) en

UserProfileHeadquar

9° Salvar los Group de la empresa

(request.POST.getlist("groups_enterprise"))

en UserProfileEnterprise

10° Salvar los Group de la asociación

(request.POST.getlist("groups_association"))

en UserProfileAssociation

11° Salvar los Group de la sede, empresa

yasociación, evitando Group repetidos usando

User.groups.add(Group)

#Si hay algun exception mantener datos

enviados en el template add_from_person.html

sin hacer cambios en la DB

rq [in]

request

str [in] key

Page 175: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

161

user_delete() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si User existe en la BD, sino,

retornar exception informando que User no

fué encontrado

3° Validar si User no es admin, si lo es

enviar un mensaje "Lo sentimos, pero este

usuario no se puede eliminar."

4° Validar si User no tiene dependencias con

otras tablas, sino, retornar exception

informando que User está asignado en la

tabla donde fué encontrada

5° Eliminar User

rq [in]

request

str [in] key

user_edit() User in

render_to_response("sad/user/edit.html", c),

to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si User existe en la BD, sino,

retornar exception informando que User no

fué encontrado

3° Intentar obtener Profile con User.id del

paso 2° si existe, sino dejar pasar sin

obtener datos del Profile del User

4° Obtener el Headquar actual, id =

DataAccessToken.get_headquar_id(request.sess

ion)

5° Obtener el listado de Group ya asignados

de User para la Headquar ( si tuviese) en

UserProfileHeadquar y mostrarlos en el

template edit.html

6° Obtener el listado de Group ya asignados

de User para la Headquar.enterprise ( si

tuviese) en UserProfileEnterprise y

mostrarlos en el template edit.html

7° Obtener el listado de Group ya asignados

de User para la Headquar.association ( si

tuviese) en UserProfileAssociation y

mostrarlos en el template edit.html

8° Obtener el listado de Module activos

asignados a su Enterprise y Asociation del

Headquar actual

9° Obtener el listado de Group

pertenecientes al Module (del 8° paso) y

darle la forma indicada en la IGU y

mostrarlos en el template edit.html (de la

forma Module>Group)

10° Obtener Person.IDENTITY_TYPES y

mostrarlos en el template edit.html

-Si method="POST":

1° Si existe otro User con el mismo

"username", retornar exception informando

que el "username" del User ya existe

2° Si existe otro User con el mismo "email",

retornar exception informando que el "email"

del User ya existe

3° Salvar User

4° Obtener Person a través de User.profile,

sino Salvar un Person nuevo

5. Obtener Profile a través de User, sino

Salvar un Profile nuevo con el User del paso

3° y Person del paso 4°

6° Si existe otro Person con el mismo

"first_name", "last_name" , "identity_num" y

"identity_type", retornar exception

informando que el Person ya existe. Use

normalize

7° Si existe otro Person con el mismo

"identity_num" y "identity_type", retornar

exception informando que ya existe un Person

con "identity_num" y "identity_type"

8° Salvar nuevamente Person del paso 4°

ahora con los datos recibidos del formulario

9° Eliminar los Group de la sede asignados

al User de UserProfileHeadquar

10° Eliminar los Group de la empresa

asignados al User de UserProfileEnterprise

11° Eliminar los Group de la asociación

asignados al User de UserProfileAssociation

rq [in]

request

str [in] key

Page 176: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

162

12° Eliminar los Group de la sede, empresa y

asociación asignados al User usando

User.groups.remove(Group)

13° Salvar los Group de la sede

(request.POST.getlist("groups_sede")) en

UserProfileHeadquar

14° Salvar los Group de la empresa

(request.POST.getlist("groups_enterprise"))

en UserProfileEnterprise

15° Salvar los Group de la asociación

(request.POST.getlist("groups_association"))

en UserProfileAssociation

16° Salvar los Group de la sede, empresa

yasociación, evitando Group repetidos usando

User.groups.add(Group)

#Si hay algun exception mantener datos

enviados en el template edit.html sin hacer

cambios en la DB

user_index() page< User> in

render_to_response("sad/user/index.html", c)

Public

1° Obtener el listado paginado de User

filtrado y ordenado según los parámetros

enviados y mostrar en el template index.html

rq [in]

request

str [in]

field

str [in]

value

str [in]

order

user_person_search() objects<Person> in

render_to_response("sad/user/person_search.html"

, c)

Public

1° Obtener el listado de Person que no están

en Profile, filtrar según los parámetros

enviados de la búsqueda, ordenar por

"last_name", "first_name" y mostrar en el

template person_search.html

rq [in]

request

str [in]

field

str [in]

value

user_state() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si User existe en la BD, sino,

retornar exception informando que User no

fué encontrado

3° Validar si User no es admin, si lo es

enviar un mensaje "Lo sentimos, pero este

usuario no se puede inactivar."

4° Actualizar el campo User.is_active para

False/True

rq [in]

request

str [in]

state

str [in] key

Page 177: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

163

user_upload() json < dict>

Public

1° Ejecute este método con ajax

2° Suba el archivo usando Upload.save_file(

, )

3° Devuelva información de la imagen subida

rq [in]

request

user_view() User in

render_to_response("sad/user/view.html", c),

to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si User existe en la BD, sino,

retornar exception informando que User no

fué encontrado

3° Intentar obtener Profile con User.id del

paso 2° si existe, sino dejar pasar sin

obtener datos del Profile del User

4° Obtener el listado de Group ya asignados

de User para las Headquar ( si tuviese) en

UserProfileHeadquar y mostrarlos en el

template view.html

5° Obtener el listado de Group ya asignados

de User para las Enterprise ( si tuviese)

en UserProfileEnterprise y mostrarlos en el

template view.html

6° Obtener el listado de Group ya asignados

de User para las Association ( si tuviese)

en UserProfileAssociation y mostrarlos en el

template view.html

7° Obtener Person.IDENTITY_TYPES y

mostrarlos en el template view.html

rq [in]

request

str [in] key

--- --- ---space

--- --- --- ---Diagrama de clases de diseño

Page 178: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

164

#association

Metodo Notas Parámetr

os

association_edit_current() Association in

render_to_response("space/association/edit_curre

nt.html", c)

Public

1° Validar si Association actual existe en la

BD meidante

DataAccessToken.get_association_id(request.se

ssion), sino, retornar exception informando

que Association no fué encontrado

2° Obtener todos los Solution activos

ordenados por "id"

-Si method="POST":

1° Si existe otro Association con el mismo

name, retornar exception informando que el

name del Association ya existe

#Si hay algun exception mantener datos

enviados en el template edit_current.html

2° Salvar Association

rq [in]

request

association_upload() json < dict>

Public

1° Ejecute este método con ajax

2° Suba el archivo usando Upload.save_file( ,

)

3° Devuelva información de la imagen subida

rq [in]

request

#enterprise

class space/v iews.py

#solution

+ solution_add(request) : Solution in render_to_response("space/solution/add.html", c), to_action("index")

+ solution_delete(request, key) : to_action("index")

+ solution_edit(request, key) : Solution in render_to_response("space/solution/edit.html", c), to_action("index")

+ solution_index(request) : objects< Solution> in render_to_response("space/solution/index.html", c)

+ solution_state(request, state, key) : to_action("index")

#association

+ association_edit_current(request) : Association in render_to_response("space/association/edit_current.html", c)

+ association_upload(request) : json < dict>

#enterprise

+ enterprise_add(request) : Enterprise in render_to_response("space/enterprise/add.html", c), to_action("index")

+ enterprise_delete(request, key) : to_action("index")

+ enterprise_edit(request, key) : Enterprise in render_to_response("space/enterprise/edit.html", c), to_action("index")

+ enterprise_edit_current(request) : Enterprise in render_to_response("space/enterprise/edit_current.html", c)

+ enterprise_index(request) : objects< Enterprise> in render_to_response("space/enterprise/index.html", c)

+ enterprise_state(request, state, key) : to_action("index")

+ enterprise_upload(request) : json < dict>

#headquar

+ headquar_add(request) : Headquar in render_to_response("space/headquar/add.html", c), to_action("index")

+ headquar_change_association(request, key) : Headquar in render_to_response("space/headquar/change_association.html", c), to_action("index")

+ headquar_delete(request, key) : to_action("index")

+ headquar_edit(request, key) : Headquar in render_to_response("space/headquar/edit.html", c), to_action("index")

+ headquar_index(request) : objects< Headquar> in render_to_response("space/headquar/index.html", c)

+ headquar_state(request, state, key) : to_action("index")

Nombre:

Paquete:

Versión:

Autor:

space/views.py

space/views.py

1.0

Asullom

Page 179: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

165

Metodo Notas Parámetr

os

enterprise_add() Enterprise in

render_to_response("space/enterprise/add.html",

c), to_action("index")

Public

1° Inicializar Enterprise

-Si method="POST":

1° Si existe otro Enterprise con el mismo

"name", retornar exception informando que el

"name" del Enterprise ya existe

2° Si existe otro Enterprise con el mismo

"tax_id", retornar exception informando que

el "tax_id" del Enterprise ya existe

3° Salvar Enterprise

4° Crear una Headquar con el

name="Principal", con la Association actual y

con el Enterprise actual

5° Si existe otro Headquar con el mismo name

para la Enterprise, retornar exception

informando que el name del Headquart para la

Enterprise ya existe

6° Salvar Headquar

#Si hay algun exception mantener datos

enviados en el template add.html sin hacer

cambios en la DB

rq [in]

request

enterprise_delete() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Enterprise existe en la BD,

sino, retornar exception informando que

Enterprise no fué encontrado

3° Validar si Association actual, a la que

pertenece la Sede de la Enterprise a

eliminar, no se quede si ninguna sede

asociada, sino, retornar exception informando

que Association no puede quedar sin ninguna

sede asociada

4° Validar si Enterprise no tiene

dependencias con otras tablas, sino, retornar

exception informando que Enterprise está

asignado en la tabla donde fué encontrada

5° Eliminar Enterprise

rq [in]

request

str [in]

key

enterprise_edit() Enterprise in

render_to_response("space/enterprise/edit.html",

c), to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Enterprise existe en la BD,

sino, retornar exception informando que

Enterprise no fué encontrado

-Si method="POST":

1° Si existe otro Enterprise con el mismo

name, retornar exception informando que el

name del Enterprise ya existe

2° Si existe otro Enterprise con el mismo

tax_id, retornar exception informando que el

tax_id del Enterprise ya existe

3° Salvar Enterprise

#Si hay algun exception mantener datos

enviados en el template edit.html

rq [in]

request

str [in]

key

enterprise_edit_current() Enterprise in

render_to_response("space/enterprise/edit_curren

t.html", c)

Public

1° Validar si Enterprise actual existe en la

BD meidante DataAccessToken.get_enterprise

_id(request.session), sino, retornar

exception informando que Enterprise no fué

encontrado

2° Obtener todos los Solution activos

ordenados por "id"

-Si method="POST":

1° Si existe otro Enterprise con el mismo

name, retornar exception informando que el

name del Enterprise ya existe

rq [in]

request

Page 180: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

166

2° Si existe otro Enterprise con el mismo

tax_id, retornar exception informando que el

tax_id del Enterprise ya existe

#Si hay algun exception mantener datos

enviados en el template edit_current.html

3° Salvar Enterprise

enterprise_index() objects< Enterprise> in

render_to_response("space/enterprise/index.html"

, c)

Public

1° Validar si Association actual existe en la

BD meidante

DataAccessToken.get_association_id(request.se

ssion), sino, retornar exception informando

que Association no fué encontrado

2° Obtener el listado de Enterprise cuya Sede

está asociada con la Association actual,

ordenado por -id y mostrar en el template

index.html.

en dicho listado debe incluirse el número de

sedes asociadas a la Association actual

rq [in]

request

enterprise_state() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Enterprise existe en la BD,

sino, retornar exception informando que

Enterprise no fué encontrado

3° Actualizar el campo Enterprise.is_active

para False/True

rq [in]

request

str [in]

state

str [in]

key

enterprise_upload() json < dict>

Public

1° Ejecute este método con ajax

2° Suba el archivo usando Upload.save_file( ,

)

3° Devuelva información de la imagen subida

rq [in]

request

#headquar

Metodo Notas Parámetr

os

headquar_add() Headquar in

render_to_response("space/headquar/add.html", c),

to_action("index")

Public

1° Inicializar Headquar

2° Obtener el listado en json de los

nombres de todos los Locality ordenado por

"name" y mostrar en el template add.html.

-Si method="POST":

1° Obtener o crear la Locality con el

nombre recibido del template add.html

2° Si existe otro Headquar con el mismo

"name" para la Enterprise, retornar

exception informando que el name del

Headquar ya existe para esa Enterprise

3° Salvar Headquar

#Si hay algun exception mantener datos

enviados en el template add.html sin hacer

cambios en la DB

rq [in]

request

headquar_change_association() Headquar in

render_to_response("space/headquar/change_associat

ion.html", c), to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Headquar existe en la BD,

sino, retornar exception informando que

Headquar no fué encontrado

3° Obtener el listado en json de los

nombres de todos los Association activos

ordenado por "name" y mostrar en el

template change_association.html

rq [in]

request

str [in]

key

Page 181: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

167

-Si method="POST":

1° Obtener la Association con el nombre

recibido del template

change_association.html, sino se encuentra,

retornar exception informando que

Association no fué encontrado, vuelva a

intentar

2° Salvar Headquar

#Si hay algun exception mantener datos

enviados en el template

change_association.html

headquar_delete() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Headquar existe en la BD,

sino, retornar exception informando que

Headquar no fué encontrado

3° Validar si Enterprise actual no se quede

si ninguna sede asociada, sino, retornar

exception informando que Enterprise no

puede quedar sin ninguna sede

4° Validar si Headquar no tiene

dependencias con otras tablas, sino,

retornar exception informando que Headquar

está asignado en la tabla donde fué

encontrada

5° Eliminar Headquar

rq [in]

request

str [in]

key

headquar_edit() Headquar in

render_to_response("space/headquar/edit.html", c),

to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Headquar existe en la BD,

sino, retornar exception informando que

Headquar no fué encontrado

3° Obtener el listado en json de los

nombres de todos los Locality ordenado por

"name" y mostrar en el template edit.html

-Si method="POST":

1° Obtener o crear la Locality con el

nombre recibido del template edit.html

2° Si existe otro Headquar con el mismo

"name" para la Enterprise, retornar

exception informando que el name del

Headquar ya existe para esa Enterprise

3° Salvar Headquar

#Si hay algun exception mantener datos

enviados en el template edit.html

rq [in]

request

str [in]

key

headquar_index() objects< Headquar> in

render_to_response("space/headquar/index.html", c)

Public

1° Validar si Enterprise actual existe en

la BD meidante

DataAccessToken.get_enterprise_id(request.s

ession), sino, retornar exception

informando que Enterprise no fué encontrado

2° Obtener el listado de Headquar de la

Enterprise actual, ordenado por -id y

mostrar en el template index.html.

rq [in]

request

headquar_state() to_action("index")

Public

1° Si no es válido la llave de seguridad,

retornar exception informando que se ha

denegado el acceso debido a que la llave es

incorrecta

2° Validar si Headquar existe en la BD,

sino, retornar exception informando que

Headquar no fué encontrado

3° Actualizar el campo Headquar.is_active

para False/True

rq [in]

request

str [in]

state

str [in]

key

#solution

Metodo Notas Parámetros

solution_add() Solution in

render_to_response("space/solution/add.html", c),

to_action("index")

Public

1° Inicializar Solution

-Si method="POST":

1° Si existe otro Solution con el mismo

name, retornar exception informando que

el name del Solution ya existe

#Si hay algun exception mantener datos

enviados en el template add.html

2° Salvar Solution

rq [in]

request

Page 182: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

168

solution_delete() to_action("index")

Public

1° Si no es válido la llave de

seguridad, retornar exception informando

que se ha denegado el acceso debido a

que la llave es incorrecta

2° Validar si Solution existe en la BD,

sino, retornar exception informando que

Solution no fué encontrado

3° Validar si Solution no tiene

dependencias con otras tablas, sino,

retornar exception informando que

Solution está asignado en la tabla donde

fué encontrada

4° Eliminar Solution

rq [in]

request

str [in] key

solution_edit() Solution in

render_to_response("space/solution/edit.html", c),

to_action("index")

Public

1° Si no es válido la llave de

seguridad, retornar exception informando

que se ha denegado el acceso debido a

que la llave es incorrecta

2° Validar si Solution existe en la BD,

sino, retornar exception informando que

Solution no fué encontrado

-Si method="POST":

1° Si existe otro Solution con el mismo

name, retornar exception informando que

el name del Solution ya existe

#Si hay algun exception mantener datos

enviados en el template edit.html

2° Salvar Solution

rq [in]

request

str [in] key

solution_index() objects< Solution> in

render_to_response("space/solution/index.html", c)

Public

1° Obtener el listado de Solution

ordenado por "-id" y mostrar en el

template index.html

rq [in]

request

solution_state() to_action("index")

Public

1° Si no es válido la llave de

seguridad, retornar exception informando

que se ha denegado el acceso debido a

que la llave es incorrecta

2° Validar si Solution existe en la BD,

sino, retornar exception informando que

Solution no fué encontrado

3° Actualizar el campo

Solution.is_active para False/True

rq [in]

request

str [in] state

str [in] key

Page 183: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

169

Anexo B9 – Formulario de lecciones aprendidas

Proyecto:

N° Iteración:

Qué salió bien en la Iteración 1. 2.

Qué no salió bien en la Iteración 1. 2.

Qué mejoras vamos a implementar en la siguiente Iteración 1. Investigar todas las formas o estilos de codificación para definir el estilo de codificación de cada componentes y funciones de la aplicación 2.

Page 184: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

170

Anexo B10 – Lista de tareas de desarrollo del backend

# Ticket Estado Estima

(h*)

Entrega

1 Inicio del proyecto Backend 01/08/2013

2 Refinación del diseño del sistema para el módulo

backend en Enterprise Architect

Hecho 48 06-ago

3 Refinación del diseño del frontend basado HTML5,

Bootstrap, JQuery, AJAX, etc

Hecho 48 11-ago

4 Componente para la Gestión de mensajería y Logs Hecho 24 14-ago

5 Componente para el Contexto de la Sesión del

Usuario en la nube

Hecho 18 16-ago

6 Componente para la seguridad de los recursos del

sistema

Hecho 24 19-ago

7 Componente para las llaves de seguridad de acceso

a datos

Hecho 8 21-ago

8 Otros componentes: Upload file, Redirect, etc. Hecho 6 22-ago

9 Gestión personalizada de Recursos (django) del

sistema

Hecho 18 25-ago

10 Gestión personalizada de PERFILES (django) de

usuarios

Hecho 6 26-ago

11 Configuración personalizada de PERMISOS (django)

o privilegios de usuarios

Hecho 12 28-ago

12 Gestión de MODULOS del sistema Hecho 12 30-ago

13 Configuración de PLANES del sistema Hecho 8 02-sep

14 CREAR CUENTA para NUEVOS USUARIOS, Empresas

y asignación de planes

Hecho 18 08-sep

15 Login y elección de la sede y módulo a administrar Hecho 12 12-sep

16 Perfil de usuario y Recuperación de contraseña Hecho 12 16-sep

17 Agregar nuevas EMPRESAS para usuarios existentes

y asignación de planes

Hecho 12 20-sep

18 Actualización de datos de la asociación Hecho 12 24-sep

19 Gestión de empresas de la asociación Hecho 12 28-sep

20 Actualización de datos de la empresa Hecho 12 02-oct

Page 185: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

171

21 Gestión de sedes Hecho 18 07-oct

22 Gestión de usuarios Hecho 18 13-oct

23 Menú dinámico Hecho 12 17-oct

24 Depuración Hecho 18 23-oct

25 Publicación y distribución en Github Hecho 3 26-oct

26 Entrenamiento de integración Hecho 12 30-oct

27 Actualización de la documentación y prototipos Hecho 48 15-nov

28 Entrega al 100% del Backend 15/11/2013

Sumas: 451

Page 186: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

172

Anexo C1 – Product backlog (requisitos del sistema)

Proyecto: QUALPACA -- Desarrollo de Plataforma Tecnológica en la Web para la

Competitividad de la Cadena Productiva de Alpacas en la Región Puno

Fecha de actualización: __04__/__11__/__2013__

Código/Sprint

Requisito Estado Estimac. (horas)

Prioridad

RF01 /1

Requisito 1: Identificación y registro de alpacas Descripción: Registro de alpacas según su procedencia, código de identificación, sexo, color, tipo o raza, datos de nacimiento, padres, localidad donde vive, asociación, rebaño y grupo a la que pertenece. Pruebas de aceptación y de seguridad: 1. Al añadir o seleccionar o buscar una alpaca el sistema

debe redirigir a la página que muestra el resumen de la información de la alpaca para su posterior actualización. El resumen dependerá de la información suministrada; esta información son: edad, datos reproductivos, producción de fibra, estado de salud y árbol genealógico.

2. La información de su grupo, padre y madre son opcionales. Si son ingresados los datos de los padres, el sistema debe generar su árbol genealógico hasta sus bisabuelos.

3. Debe mostrar en HTML los registros de alpacas reproductoras y no reproductoras dado un rango de fecha y un grupo.

4. El usuario debe tener acceso de “Administrador” o “Técnico de campo” al rebaño o al grupo para poder actualizar el Registro de alpacas. El usuario no puede visualizar ni actualizar registros del grupo o rebaño que no le está autorizado.

5. Poder rastrear al usuario que actualizó el Registro de alpacas.

Nuevo 40 10

RF02 /1

Requisito 2: Empadre y gestación Descripción: Pruebas de aceptación y de seguridad: 1. 2.

Nuevo 40 8

RF03 /1

Requisito 3: Parición y destete Descripción: Pruebas de aceptación y de seguridad: 1. 2.

Nuevo 20 6

RF04 /2

Requisito 4: Sanidad Descripción:

Nuevo 4

Page 187: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

173

Pruebas de aceptación y de seguridad: 1. 2.

Requisito 5: Esquila Descripción: Pruebas de aceptación y de seguridad: 1. 2.

Nuevo 20 3

Requisito 6: Retiro Descripción: Pruebas de aceptación y de seguridad: 1. Alpaca X ya no está en el registro de alpacas

reproductoras 2.

Nuevo 10 2

Requisito 7: Castración Descripción: Pruebas de aceptación y de seguridad: 1. 2.

Nuevo 10 1

Page 188: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

174

Anexo C2 - Registro de riesgos de seguridad (amenazas y vulnerabilidades)

Proyecto: QUALPACA -- Desarrollo de Plataforma Tecnológica en la Web para la

Competitividad de la Cadena Productiva de Alpacas en la Región Puno

Fecha de actualización: __04__/__11__/__2013__

COD Riesgo de seguridad Tipo (A/V)

Probabilidad

Impacto

Prioridad

RS-Q01

El sistema permite visualizar y actualizar información de alpacas de otros rebaños. Un usuario debe tener acceso únicamente a los registros de los Grupos previamente asignados.

V Alto Alto 1000

A: Amenza V: Vulnerabilidad

Probabilidad: Alta, Media, Baja

Impacto: Alta, Media, Baja

Page 189: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

175

Anexo C3 - Registro de componentes de seguridad

Proyecto: QUALPACA -- Desarrollo de Plataforma Tecnológica en la Web para la

Competitividad de la Cadena Productiva de Alpacas en la Región Puno

Fecha de actualización: __04__/__11__/__2013__

COD Componente de seguridad Riesgos de seguridad

CS-B01

UserToken. Contiene información de accesos a los Gupos de un determinado rebaño, bajo ciertos perfiles de usuario. Con lo cual permite el control del acceso a datos de alpacas de cierto Grupo.

RS-Q01.

class UserToken: @staticmethod def set_grupo_id_list(request , grupo_id_list): request.session['grupo_id_list'] = grupo_id_list @staticmethod def get_grupo_id_list(session): return session.get('grupo_id_list', False)

Ejemplo de uso: Asignación del privilegio:: grupo_id_list = list({d.id: d for d in Headquart.grupo_set.all()}) UserToken.set_grupo_id_list(request, grupo_id_list)

Validación:: if camelido.id in UserToken.get_grupo_id_list(request.session): #OK else: raise Exception( "Falta de privilegios ")

Page 190: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

176

Anexo C4 – Arquitectura de la aplicación

1. Información general

Código y Nombre del proyecto: QUALPACA

2. Historial de revisiones

Versión - Fecha - Elaborado por

1.0 04/04/2013 – Angel Sullón

3. Arquitectura de la aplicación MTV (equivalente a MVC)

Capa Tecnología Función Modelo: M Django Model Entidades y mapeamientos Django Test/Unit Test Pruebas unitarias del modelo

Vista: V Django View Django Business

Controlador de solicitudes y respuestas Reglas de negocio y restricciones

SAD Backend Solicitudes y respuestas con AJAX Restricciones de seguridad Logs Mensajería y Notificaciones

Django Test Pruebas de integración de las vistas y de los formularios

Template: T Django Template Interfaces gráficas de usuario para las entradas de datos y mostrar resultados

Bootstrap Diseño responsivo multidispositivo

JQUERY Utilitarios diversos

AJAX+ JSON Solicitudes y respuestas asíncronas

SAD Frontend Solicitudes y respuestas con AJAX Generación de objetos HTML en tiempo de ejecución Hojas de estilos personalizados

Selenium Pruebas funcionales en la Web

Page 191: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

177

Anexo C5 – Estándares de desarrollo

1. Información general

Código y Nombre del proyecto: QUALPACA

2. Historial de revisiones

Versión - Fecha - Elaborado por

1.0 04/04/2013 – Angel Sullón

3. Términos de definición de identificadores

ID Término Ejemplo

Proyecto <nombre_proyecto> agil_cont

Paquetes <nombre_carpeta> catalogo_productos

Base de datos <nombre_db> agil_cont_db

Tablas <prefix_nombre_tabla> common_natural_person

Atributo PK id id

Atributo <nombre_atributo> functional_code

Atributo FK <tabla>_id natural_person_id

Paquetes <nombre_carpeta> catalogo_productos

Clases <NombreClase><NombreCapa/vacio> class NaturalPerson

Variables <nombre_variable> functional_code

Contantes <NOMBRE_CONSTANTE> DEFAULT="DNI"

Método <nombre_metodo>(var_nombre) def add(); def edit(); def delete(); def get_by_id(id); def get_list_by_filter(filter);

Enumerators <NOMBRE_ENUM> DEFAULT="DNI" CE="CE" OTHERS="OTHERS" IDENTITY_TYPES = ( (DEFAULT, "D.N.I."), (CE, "C.E."), (OTHERS, "Otro.") )

Archivos <nombre_pagina>.<py/html> natural_person.html

Interfaces I<NombreClase><NombreCapa/vacio> INaturalPersonService

Page 192: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

178

Anexo C6 – Método de trabajo del equipo

1. Información general

Código y Nombre del proyecto: QUALPACA

Desarrollo de Plataforma Tecnológica en la Web para la Competitividad de la Cadena Productiva de Alpacas en la Región Puno

2. Historial de revisiones

Versión - Fecha - Elaborado por

1.0 04/04/2013 – Angel Sullón

3. Equipo de trabajo

Rol Nombre Ciudad Correo/Celular Tiempo

Product Owner

Dra. Nelida Gladys Maquera Sosa

Juliaca [email protected] 50%

Scrum Master

Ing. Fredy Abel Huanca Torres

Puno [email protected] 30%

Dupla 1-Doc./Dev.

Ing. Fredy Abel Huanca Torres

Puno [email protected] 20%

Ing. Ángel Sullón Macalupú

Chullunquiani [email protected] 50%

Dupla 2-Dev.

Est. Oscar David Mendoza Apaza

Juliaca

[email protected] 100%

Est. Elvis Alí Vilca Juliaca [email protected]

50%

4. Herramientas

Elemento Herramienta Hosting

Portal de gerenciamiento

Assembla.com https://www.assembla.com/spaces/concytec-qualpaca

Portal de integración Github.com https://github.com/abelthf/qualpaca-project

Modelo y Prototipado Enterprise Architect 7.5 Balsamiq

http://grupoinnop.pe/design

Lenguaje de programación

Python

Frameworks Django 1.6.8

Framework responsivo Bootstrap 2

Base de datos MySQL 5.x

IDE Sublime Text 2

Comunicaciones Facebook https://www.facebook.com/groups/513850221984640

Page 193: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

179

5. Retos a superar

Desafío Solución

Respecto a la metodología scrum Definir la duración del sprint a 4 semanas Lea la wiki y utilice el foro de discusión del portal de gerenciamiento (Mensajes)

Respecto al equipo distribuido (parcial o totalmente, horarios, idiomas diferentes)

Definir las tareas en base a una unidad de trabajo diario o semanal (que incluya testes) Informar el estado de las tareas en el portal de gerenciamiento, incluye horas restantes. Enviar el reporte de trabajo diario o semanal (StandUp) Documentación en inglés Consigue una llamada con Hangout, Facebook o Skype

Respecto a las herramientas de trabajo

Entrenamiento en las herramientas a usar

Respecto a la experiencia de los desarrolladores

Cada código, diagrama, prototipos debe seguir el estándar de desarrollo elegido Entrenamiento en las tecnologías a usar

Respecto a la documentación El diseño/prototipo/restricciones deben estar listos y validados a un Sprint de anticipación

Falta de compromiso del cliente Involucrar al cliente en las reuniones y demos

Page 194: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

180

Anexo C7 – Prototipos principales

Proyecto: QUALPACA

Módulo: Producción

Fecha:

Requisito 1: Identificación y registro de alpacas

ui index.html

Page 195: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

181

Funcionalidad: Página que permite la administración de registros de alpacas.

Aprobado por: Dra. Gladys Maquera Sosa

ui add.html

Page 196: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

182

Anexo C8 – Diseño del sistema

1 INFORMACIÓN GENERAL

Código y Nombre del proyecto: QUALPACA

Desarrollo de Plataforma Tecnológica en la Web para la Competitividad de la Cadena Productiva de Alpacas en la Región Puno

2 HISTORIAL DE REVISIONES

Versión - Fecha

1.0 – __04__/__11__/__2013__

3 ACTUALIZACIONES IMPORTANTES

Diseño integrado con los componentes de Backengo versión 1.0

4 LINKS DE DESCARGA O DE CONSULTA

Modelo [http://grupoinnop.pe/design] (Este hosting requiere contraseña)

Scripts: No es necesario, Django genera automáticamente las tablas.

5 ESTRUCTURA DEL MODELO

Módulo

---Modelo del dominio

--- ---app registro

pkg Qualpaca Modules

El alcance de Qualpaca versión 1.0 consta de 3 módulos:

backend: para configurar el sistema y administrar las cuentas de los usuarios (acceso restringido para

superusers).

production: crianza mejorada de alpacas. Registro, empadre, parición, sanidad y esquila

web: la página web de Qualpaca (completamente independiente de los otros módulos, se integra vía json o

webservices)

Page 197: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

183

--- --- ---Diagrama de entidades

---Modelo de clases

--- ---Capa(si es Models o Views(Views en MVC es Controllers))

--- --- ---registro app

--- --- --- ---Diagrama de clases de diseño – Business Layer

--- --- --- ---Diagrama de clases de diseño – View Layer

class registro

Camelido

- codigo_arete: Char

- consanguinidad_adn: Char

- diametro_fibra: Char

- fecha_destete: DateTime

- fecha_nac: DateTime

- imagen: Image

- nombre: Char

- observaciones: Text

- parecido: Char

- peso_bellon: Char

- peso_nac: Char

- procedencia_det: Text

- registered_at: DateTime

space::Headquar(sede)

- address: Text

- is_active: Boolean

- is_main: Boolean

- modified_in: DateTime

- name: Char

- phone: Char

- registered_at: DateTime

space::Grupo

- majada: Boolean

- nombre: Char

GrupoCamelido

- fecha_grupo: DateTime

- registered_at: DateTime

0..*

+sede

1

0..*

+grupo

0..1

0..*

+sede 1

0..*

+camelido

0..1

class registro.business

«business.py»

CamelidoBusiness

+ get_arbol_gen_by_id(id :int) : json<Camelido>

+ get_by_id(id :int) : Camelido

+ get_list_by_headquart_and_fechas_and_grupo(rebanho_id :int, fecha_ini :DateTime, fecha_fin :DateTime, grupo_id :int?) : objects<Camelido>

+ get_list_by_headquart_and_filter(rebanho_id :int, fi lter :string?) : objects<Camelido>

+ get_list_by_headquart_and_sexo_and_filter(rebanho :Headquart, sexo :string, fi lter :string) : objects<Camelido>

+ get_list_by_sexo_and_filter(sexo :string, fi lter :string) : objects<Camelido>

+ get_page_by_headquart_and_grupo(rebanho_id :int, grupo_id :int?, order :string?, num_rows :int?, page_index :int?) : objects<Camelido>

+ get_retiro_list_by_headquart_and_fechas_and_grupo(rebanho_id :int, fecha_ini :DateTime, fecha_fin :DateTime, grupo_id :int?) : objects<Camelido>

+ initialize() : Camelido()

+ remove(id :int) : Camelido

+ save(camelido :Camelido) : Camelido

class registro.v iews

camelido

+ camelido_add(request :HttpRequest) : render_to_response,camelido_edit|HttpResponseRedirect

+ camelido_edit(request :HttpRequest, id :Integer) : render_to_response,camelido_edit|HttpResponseRedirect

+ camelido_ficha(request :HttpRequest, id :Integer) : render_to_response

+ camelido_json_by_filter(request :HttpRequest, fi l ter :string) : render_to_response

+ camelido_report(request :HttpRequest, fecha_ini :DateTime, fecha_fin :DateTime, grupo_id :int?) : render_to_response

+ camelido_report_retiro(request :HttpRequest, fecha_ini :DateTime, fecha_fin :DateTime, grupo_id :int?) : render_to_response

+ camelido_retiro(request :HttpRequest, id :Integer) : camelido_remove|HttpResponseRedirect

+ hembra_json_by_filter(request :HttpRequest, fi l ter :string) : render_to_response

+ macho_json_by_filter(request :HttpRequest, fi l ter :string) : render_to_response

Page 198: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

184

Diagrama de procesos de negocio para el módulo de producción

act Manejo Reproductiv o en Alpacas

Inicio

fin

Manejo reproductivo en alpacas

Obs.

Calendario ganadero (genérico y personalizado

por zonas)

Calendairo sanitario

Selección e Identificación

(registro)

Empadre y

Gestación(empadre)

Parición(paricion)

Castración (componente

opcional)

Esquila

Faeneo,Venta, Descarte,...

(retiro)

Sanidad

Actividades simultáneas

Quedó

preñada?

fin

Destete

[Más de 4 servicios]

[Hasta 4 servicios]

[no]

[si]

Page 199: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

185

Operaciones de la clase business “CamelidoBusiness”

Metodo Notas Parámetros

get_arbol_gen_by_id() json<Camelido>

Public

int [in] id

get_by_id() Camelido

Public

int [in] id

get_list_by_headquart_and_fec

has_and_grupo() objects<Camelido> Public

order by -id Para el reporte de Registro de

alpacas(entradas).

if grupo_is is None: Traer todos los grupos

cuyo estado es seleccionado excepto Majada.

No traer alpacas con algún estado de retiro

(venta, muerte, etc.)

int [in] rebanho_id

DateTime [in] fecha_ini

DateTime [in] fecha_fin

int? [in] grupo_id

get_list_by_headquart_and_filte

r() objects<Camelido>

Public

order by codigo_arete Este método será para buscar alpaca en el

texbox principal, la view lo convertirá en

formato json

debe buscar según el filter en todos los

Grupos, incluso en Majada. No traer los que

tienen algun estado de retiro

Debe mostrar el último estado (parición,

seleccionado. descartado si es majada)

La validación de seguridad si el usuario

puede o no editar información de ese Grupo se

hará cuando el usuario invoque la acción

int [in] rebanho_id

string? [in] filter

get_list_by_headquart_and_sex

o_and_filter() objects<Camelido>

Public

order by codigo_arete Traer los que tienen como último

estado=seleccionado

este método se usará para buscar su madre o

padre

Headquart [in] rebanho

string [in] sexo

string [in] filter

get_list_by_sexo_and_filter() objects<Camelido>

Public

order by codigo_arete Traer los que tienen como último

estado=seleccionado

este método se usará para buscar su madre o

padre

Debe buscar en todos los rebaños (heardquar)

string [in] sexo

string [in] filter

get_page_by_headquart_and_gr

upo() objects<Camelido> Public

order by -id Si grupo_id es None, traer todos los grupos,

incluso Majada. No traer los que tienen algún

estado de retiro (venta, muerte, etc.)

Debe mostrar el último estado (parición,

seleccionado. descartado si es majada)

La validación de seguridad si el usuario

puede o no editar información de ese Grupo se

hará cuando el usuario invoque la acción

int [in] rebanho_id

int? [in] grupo_id

string? [in] order

int? [in] num_rows

int? [in] page_index

get_retiro_list_by_headquart_a

nd_fechas_and_grupo() objects<Camelido> Public

order by -id Para el reporte de Registro de

alpacas(entradas).

if grupo_is is None: Traer todos los grupos

cuyo estado es seleccionado excepto Majada.

No traer alpacas con algún estado de retiro

(venta, muerte, etc.)

int [in] rebanho_id

DateTime [in] fecha_ini

DateTime [in] fecha_fin

int? [in] grupo_id

initialize() Camelido()

Public

remove() Camelido Public

Retirar es cambiar su estado para algún

estado de retiro a una alpaca.

int [in] id

save() Camelido

Public

Camelido [in] camelido

Page 200: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

186

Operaciones de la clase view “camelido”

Metodo Notas Parámetros

camelido_add() render_to_response,camelido_edit

|HttpResponseRedirect Public

HttpRequest [in] request

camelido_edit() render_to_response,camelido_edit|HttpResponseRedirect

Public

HttpRequest [in] request

Integer [in] id

camelido_ficha() render_to_response

Public

Llamar los métodos según correspondan

HttpRequest [in] request

Integer [in] id

camelido_json_by_filter() render_to_response

Public

HttpRequest [in] request

string [in] filter

camelido_report() render_to_response Public

llama a get_list_by_headquart_and_fechas_and_grupo

HttpRequest [in] request

DateTime [in] fecha_ini

DateTime [in] fecha_fin

int? [in] grupo_id

camelido_report_retiro() render_to_response Public

llama a get_list_by_headquart_and_fechas_and_grupo

HttpRequest [in] request

DateTime [in] fecha_ini

DateTime [in] fecha_fin

int? [in] grupo_id

camelido_retiro() camelido_remove|HttpResponseRedirect

Public

llama a remove

HttpRequest [in] request

Integer [in] id

hembra_json_by_filter() render_to_response

Public

HttpRequest [in] request

string [in] filter

macho_json_by_filter() render_to_response

Public

HttpRequest [in] request

string [in] filter

Page 201: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

187

Anexo C9 – Formulario de lecciones aprendidas

Proyecto: QUALPACA

N° Iteración: 1

Qué salió bien en la Iteración 1. La distribución de tareas fue acertada en tiempo, gracias al modelado de procesos de negocio, al diseño detallado del sistema y al empeño del equipo de desarrollo. 2. El estilo de uso de los componentes de seguridad indicados en el backend permitieron escribir código limpio y en menos líneas de código.

Qué no salió bien en la Iteración 1. La resolución de conflictos durante la sincronización del código en el repositorio remoto github.com 2.

Qué mejoras vamos a implementar en la siguiente Iteración 1. 2.

Page 202: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

188

Anexo C10 – Acta de constitución del proyecto

1 INFORMACIÓN GENERAL

Código y Nombre del proyecto: QUALPACA - Desarrollo de Plataforma Tecnológica en la Web para la Competitividad de la Cadena Productiva de Alpacas en la Región Puno

Organización: CONCYTEC-UPeU/Grupo InnOp Perú

Modalidad del servicio: Contrato

Fecha de inicio: 01-05-2013

Fecha de vencimiento: 30-09-2013 (Plazo de entrega: 4 meses)

Presupuesto estimado: S/. 12,000.00 NUEVOS SOLES

Presupuesto tope: S/. 12,000.00 NUEVOS SOLES

Dueño del producto: Gladys Maquera

Patrocinador del proyecto: CONCYTEC a través de Gladys Maquera

Gerente del proyecto (Master): Abel Huanca

2 HISTORIAL DE REVISIONES

Versión - Fecha - Elaborado por

1.0 - 21/06/2013 - Abel Huanca

3 OBJETIVOS DEL PROYECTO

Desarrollar e implementar una plataforma tecnológica basada en la Web moderna para la Competitividad de la Cadena Productiva de Alpacas en la Región Puno

4 JUSTIFICACIÓN DEL PROYECTO

Proporcionar un sistema de información que colabore con el fortalecimiento de las capacidades de mejoramiento genético de la crianza de Alpacas que es la base fundamental del Primer eslabón de la cadena productiva.

5 ALCANCE DEL PROYECTO

El proyecto consta de los siguientes actividades:

Evaluación y pruebas de las diferentes método y tecnologías para desarrollo web moderna y segura

Creación e implementación de la plataforma tecnológica basada en la Web moderna para la Competitividad de la Cadena Productiva de Alpacas en la Región Puno

Creación e implementación de la página web donde se divulgará la información referente a la mejora productiva de alpacas.

6 DESCRIPCIÓN GENERAL DEL SOFTWARE

El software es un aplicación web como servicio (SaaS) totalmente responsivo compatible con cualquier navegador web que registra y proporciona información para el mejoramiento genético de alpacas basado en el sistema de empadre controlado, así como la producción de fibra del rebaño.

Módulos:

1. Backend para la nube que gestione la información de muchas empresas y asociaciones productoras de fibra de alpaca, donde los usuarios acceden a la información según sus funciones predefinidas.

2. Módulo de producción: Selección e identificación, empadre y gestación, parición y destete, sanidad, esquila, castración y retiro de alpacas

Page 203: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

189

3. Página Web donde se divulgará la información referente a la mejora productiva de alpacas.

7 BENEFICIARIOS FINALES DEL SOFTWARE

Instituciones públicas y privadas productoras de fibra de alpacas de la Región Puno

Productores independientes

8 REFERENCIAS

Product backlog o Requisitos del Sistema

9 FIRMA DE AUTORIZACIÓN DE LAS PARTES

Dra. Gladys Maquera Sosa Por el CONCYTEC

Ing. Abel Huanca Torres Gerente del Proyecto Qualpaca

Page 204: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

190

Anexo C11 – Sprint backlog

Proyecto: QUALPACA -- Desarrollo de Plataforma Tecnológica en la Web para la

Competitividad de la Cadena Productiva de Alpacas en la Región Puno

Nombre del Sprint: 1

Fecha de actualización: __05__/__11__/__2013__

Objetivos: [Funcionalidad del negocio que se va a generar]

1. Permitir el levantamiento de información de identificación, clasificación, empadre,

gestación, parición, destete, sanidad, esquila, castración y retiro.

COD Sprint 1 Estado Trabajo restante

Responsable

T01 Tarea: Desarrollar el MODELO de datos para el módulo de PRODUCCIÓN y generar la administración automática Django. Descripción: Actualizar las apps: apps/params apps/rrhh apps/sad apps/space Crear las apps: apps/registro apps/empadre apps/paricion apps/registro apps/sanidad apps/esquila apps/castración apps/mod_produccion (sin tablas) Crear las carpetas templates templates/registro templates/empadre templates/paricion templates/registro templates/sanidad templates/esquila templates/castración templates/mod_produccion templates/partials/producción Pruebas de aceptación y de seguridad: 1. Poder ingresar datos de prueba para todas las tablas del módulo de PRODUCCIÓN mediante el administrador de Django. 2. Las tablas deben quedar integrados con las tablas de seguridad del Backend en caso que así lo ameriten.

Hecho 4 horas Ángel Sullon

Page 205: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

191

T02 Tarea: Desarrollar la página index del módulo de producción para listar y buscar alpacas. Descripción: Replicar template base para el mod_produccion con menú sidebar: templates/base_mod_produccion.html templates/base_mod_produccion_sidebar.html templates/denied_mod_produccion.html Listado de alpacas en : templates/mod_produccion/camelido_list.html apps/mod_produccion/views.camelido_list Búsqueda asíncrona (AJAX) de alpacas en: templates/partials/produccion/header.html apps/mod_produccion/views.camelido_json_by_filter Redirigir a: templates/registro/registro/index.html (dejar vacío) apps/registro/views.registro_index Pruebas de aceptación y de seguridad: 1. Visualizar o buscar alpacas del rebaño y al encontrar mostrar detalles del registro en otra ventana. 2. Al actualizar con método GET en caso de errores, debe mantenerse en el módulo de PRODUCCION.

Hecho 4horas Oscar Mendoza

T03 Tarea: Refinar el listado y búsqueda de alpacas Descripción: Estos resultados deben mostrar alpacas con el último estado del camélido y según privilegios del usuario. Listado de alpacas en : apps/mod_produccion/views.camelido_list Búsqueda asíncrona (AJAX) de alpacas en: apps/mod_produccion/views.camelido_json_by_filter Pruebas de aceptación y de seguridad: 1. En el listado o búsqueda, mostrar alpacas con el último estado. 2. Permitir listar o buscar alpacas para los rebaños o grupos asignados al usuario. También usar llave de seguridad.

Hecho 8horas Elvis Ali

T04 Tarea: Agregar y editar datos del camélido. Descripción: Agregar alpaca en : templates/registro/add.html apps/registro/views.registro_add Resultados en formato JSON: apps/registro/views.macho_json_by_filter apps/registro/views.hembra_json_by_filter

Hecho 16horas Oscar Mendoza

Page 206: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

192

apps/registro/views.camelido_upload Redirigir a: templates/registro/registro/edit.html (cargar datos) apps/registro/views.registro_edit y desarrollar el método editar. Pruebas de aceptación y de seguridad: 1. Registrar y actualizar datos de alpacas, verificar datos obligatorios. 2. Registrar usuario que registra los datos de la alpaca. 3. No se debe permitir actualizar los datos de la alpaca si el usuario no tiene permisos.

T05 …

Page 207: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

193

Anexo C12 – Acta de conformidad del servicio o entrega

1 INFORMACIÓN GENERAL

Código y Nombre del proyecto: QUALPACA - Desarrollo de Plataforma Tecnológica en la Web para la Competitividad de la Cadena Productiva de Alpacas en la Región Puno

Organización: CONCYTEC-UPeU/Grupo InnOp Perú

Fecha de inicio: 01-05-2013

Fecha de vencimiento: (Plazo de entrega)

Presupuesto estimado: S/. 12,000.00 NUEVOS SOLES

Presupuesto tope: S/. 12,000.00 NUEVOS SOLES

Dueño del producto: Dra. Gladys Maquera

Patrocinador del proyecto: CONCYTEC a través de Gladys Maquera

Gerente del proyecto (Master): Ing. Abel Huanca

FECHA DE ENTREGA: 04-12-2013

2 RESULTADO

Conforme: Si

Días atraso: 6 a partir del inicio del desarrollo

3 OBSERVACIONES

No hubo observaciones relevantes.

4 FIRMA DE CONFORMIDAD DEL CLIENTE O PATROCINADOR

Dra. Gladys Maquera Sosa

Page 208: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

194

Anexo C13 – Manual del usuario

Nombre de la Aplicación

BACKEND PARA APLICACIONES CON DJANGO Manual del Usuario

Última revisión

14-05-2014

Elaborado por

Angel Sullón Macalupú

Características Módulo Backend para aplicaciones web SaaS seguras escritas en Django y con la elegancia de Bootstrap. Permite gestionar diferentes partes del sistema: usuarios, perfiles, recursos, permisos, módulos, planes, menús, asociaciones, empresas, sedes, logs, seguridad, internacionalización y mucho más.

Descarga, Instalación y Ejecución

Descarga gratis de GitHub https://github.com/submitconsulting/backengo e instale las dependecias:

$ pip install -r requirements.txt Para ejecutar: $python manage.py runserver

Página de Inicio

Page 209: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

195

Crear cuenta de usuario

Formulario de ingreso

Page 210: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

196

Elección de la empresa/sede y módulo

Configuración de los planes SaaS

Creación de recursos

Page 211: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

197

Creación de menús

Formulario registro de nuevas empresas

Gestión de empresas

Page 212: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

198

Gestión de sedes

Gestión de usuarios

Page 213: UNIVERSIDAD PERUANA UNIÓN - core.ac.uk · 5.5.4 Referencia directa insegura a objetos ..... 69 5.5.5 Configuración de seguridad incorrecta ..... 71 5.5.6 Exposición de datos sensibles

199