Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ESCUELA DE POSGRADO
UNIDAD DE POSGRADO DE INGENIERA
Por:
Abel ngel Sulln Macalup
LIMA, PER
2014
DEDICATORIA
ii
AGRADECIMIENTOS
iii
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
CAPTULO 1 ..................................................................................................... 1
INTRODUCCIN ..................................................................................................... 1
CAPTULO 2 ..................................................................................................... 4
REVISIN BIBLIOGRFICA ................................................................................... 4
2.1
2.1.1
2.1.2
2.1.3
Software ........................................................................................................... 7
2.1.4
2.1.5
2.1.6
2.1.7
Aplicaciones web.............................................................................................. 8
2.1.8
2.1.9
Anlisis de riesgo.............................................................................................. 9
2.2
2.2.1
2.2.2
2.2.3
2.2.4
2.2.5
2.2.6
2.2.7
SDL-Agile ........................................................................................................ 24
2.2.8
2.2.9
2.3
2.3.1
Manifiesto gil................................................................................................ 29
iv
2.3.2
2.3.3
2.3.4
Prcticas XP y TDD.......................................................................................... 33
2.3.5
CAPTULO 3 ....................................................................................................40
MATERIALES Y MTODOS ...................................................................................40
3.1
3.2
3.2.1
Equipos ........................................................................................................... 40
3.2.2
Software ......................................................................................................... 40
3.2.3
Servicios ......................................................................................................... 41
3.2.4
3.3
3.4
3.5
3.6
3.7
CAPTULO 4 ....................................................................................................50
CONSTRUCCIN DEL MODELO PARA EL DESARROLLO .................................50
DE APLICACIONES WEB SEGURAS ....................................................................50
4.1
Introduccin ........................................................................................................... 50
4.2
4.3
4.3.1
4.3.2
4.3.3
4.3.4
Seguimiento ................................................................................................... 52
4.4
4.5
4.5.1
4.5.2
4.5.3
4.5.4
4.5.5
Estndares de desarrollo................................................................................ 55
4.5.6
4.5.7
4.5.8
4.6
4.7
4.8
4.9
4.9.1
4.10
4.11
4.11.1
4.12
Resumen ................................................................................................................ 62
CAPTULO 5 ....................................................................................................64
VALIDACIN DEL MODELO PROPUESTO...........................................................64
WSM-DEV PARTE 1............................................................................................64
5.1
Introduccin ........................................................................................................... 64
5.2
5.2.1
5.2.2
5.2.3
5.2.4
5.3
5.4
5.5
5.5.1
SQL inyection.................................................................................................. 68
5.5.2
5.5.3
5.5.4
5.5.5
5.5.6
5.5.7
5.5.8
5.5.9
5.5.10
5.5.11
5.5.12
5.5.13
Permisos inconsistentes................................................................................. 77
5.6
5.7
Resumen ................................................................................................................ 81
CAPTULO 6 ....................................................................................................82
VALIDACIN DEL MODELO PROPUESTO...........................................................82
WSM-DEV PARTE 2............................................................................................82
6.1
Introduccin ........................................................................................................... 82
6.2
6.3
6.4
6.5
Resumen ................................................................................................................ 84
CAPTULO 7 ....................................................................................................85
RESULTADOS Y DISCUSIN ...............................................................................85
7.1
Nuevo modelo prctico para desarrollar aplicaciones web seguras en el menor
tiempo. ............................................................................................................................... 85
7.2
Mdulo backend de administracin y configuracin de aplicaciones web tipo SaaS
con Django. ........................................................................................................................ 86
CAPTULO 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 aplicacin ........................................................................ 100
Anexo A5 Estndares de desarrollo .............................................................................. 101
Anexo A6 Mtodo de trabajo del equipo...................................................................... 102
Anexo A7 Prototipos principales ................................................................................... 104
Anexo A8 Diseo del sistema ........................................................................................ 105
Anexo A9 Formulario de lecciones aprendidas............................................................. 106
Anexo B1 Requisitos del Sistema (mdulo backend web seguro) ................................ 107
vii
viii
NDICE DE TABLAS
Tabla 1 Taxonoma de requisitos de seguridad con ejemplos ................................ 5
Tabla 2 Sintona 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 ms importantes en aplicaciones web 2013 ................. 21
Tabla 9 - Indicadores de evaluacin para el modelo propuesto .............................. 42
Tabla 10 - Cronograma de actividades ................................................................... 46
Tabla 11 - Presupuesto del proyecto ...................................................................... 48
Tabla 12 - Financiamiento del proyecto .................................................................. 49
ix
NDICE DE FIGURAS
Figura 1 Aspectos coincidentes entre SSE-CMM, COBIT e ITIL en relacin 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 mtodo SDL ............................................................... 24
Figura 5 Ciclo de vida de SDL-Agile .................................................................... 24
Figura 6 - Vista general del mtodo 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 implementacin del SGSI utilizando la norma ISO/IEC
27001:2005 en el centro de cmputo 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 elaboracin de la propuesta ............................................ 41
Figura 15 Diagrama de flujo de las actividades de la investigacin ...................... 44
Figura 16 Diseo del modelo WSM-DEV ............................................................. 50
Figura 17 Modelo de autorizacin de usuarios ..................................................... 78
Figura 18 Modelo de autorizacin de usuarios de aplicaciones SaaS .................. 79
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 aplicacin ................................................. 100
Anexo A5 Estndares de desarrollo ..................................................... 101
Anexo A6 Mtodo de trabajo del equipo ............................................... 102
Anexo A7 Prototipos principales ........................................................... 104
Anexo A8 Diseo del sistema ............................................................... 105
Anexo A9 Formulario de lecciones aprendidas .................................... 106
Anexo B1 Requisitos del Sistema (mdulo 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 aplicacin ................................................ 111
Anexo B5 Estndares de desarrollo ..................................................... 112
Anexo B7 Prototipos principales ........................................................... 113
Anexo B8 Diseo 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 aplicacin ................................................ 176
Anexo C5 Estndares de desarrollo ..................................................... 177
Anexo C6 Mtodo de trabajo del equipo .............................................. 178
xi
xii
RESUMEN
xiii
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.
xiv
CAPTULO 1
INTRODUCCIN
CAPTULO 2
REVISIN BIBLIOGRFICA
Marco conceptual
2.1.1
descripcin simplificada de un proceso del software que presenta una visin 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 ingeniera del
software.
2.1.2
Taxonoma de la seguridad
Bashir (citado por Vega V y otros 2006), clasifica el concepto de seguridad en
Auditoria: Capacidad de registrar los eventos que afectan al sistema, para que
posteriormente se pueda reconstruir los estados pasados del sistema.
Viega y McGraw (citado por Vega V y otros 2006), plantean los siguientes
objetivos de la seguridad:
Monitoreo.
Observar
monitorear
constantemente
el
software
en
Nivel 2
No repudio
No repudio
Confidencialidad Encriptacin
Encriptar
usuarios
5
la
contrasea
de
los
Autenticacin
sin
que
este
se
haya
identificado.
Agregacin
Atribucin
registrarse
realizados
en
los
cambios
el
acuerdo
previamente aprobados.
Consentimiento
Concurrencia
No
se
permite
ms
de
dos
No
se
proveer
informacin
Edicin
Eliminacin
Validacin de datos
Aceptar
solo
datos
numricos
excepciones
Pre-requisitos
comprueba
la
disponibilidad
de
fondos
Separacin de roles
Disponibilidad
Tiempo de respuesta
Se
deber
proporcionar
la
Asignacin de
recursos
ser de 10MB.
2.1.3
Software
Segn Pressman (2004), el software es un elemento del sistema que es lgico,
como son las instrucciones (programas) quienes sern el medio de interaccin entre
el factor humano y el hardware correspondiente a un sistema de informacin.
2.1.4
ingeniera que comprende todos los aspectos de la produccin del software desde
las etapas iniciales de la especificacin del sistema, hasta el mantenimiento de ste
despus de que se utiliza. En sntesis, la ingeniera de software no solo est dedicada
al desarrollo del software, sino tambin hacia diferentes etapas durante su ciclo de
vida.
2.1.5
soporte lgico y los datos que maneja se alojan en servidores de una compaa de
tecnologas de informacin y comunicacin (TIC), a los que se accede va Internet
desde un cliente. La empresa proveedora TIC se ocupa del servicio de
mantenimiento, de la operacin 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 informacin, el
7
Aplicaciones web
Las aplicaciones web son generalmente vistas en un browser. Una aplicacin
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 tambin restringirnos (Internet
Explorer
6/7).
Las
aplicaciones
debern
estar
escritas
en
Desarrollo web
Desarrollo Web es un trmino utilizado para definir todo el trabajo de creacin
de una pgina web. Desarrollo Web puede abarcar desde una simple pgina esttica
hasta aplicaciones web bastante ms complejas, tales como redes sociales como
facebook, pginas de e-commerce como ebay, aplicaciones mviles como google
maps, entre otros.
2.1.9
Anlisis de riesgo
El anlisis de riesgos, consiste en identificar los riesgos de seguridad en la
Objetivos de seguridad
Modelo de
McCall
caracterstica de la calidad
calidad o
estndar
Boehm
modelo es su orientacin de la
al desarrollador, sin
factores definidos la
seguridad no se encuentra
definicin de un factor de la
de las caractersticas se
caracterstica es recomendable
confidencialidad e
integridad
Modelo de
Gilb
software de forma
10
de la seguridad y aplicarla al
por la generalidad de su
software.
Paradigma
El paradigma introduce
GQM
se estudia la seguridad en
producidos.
Estndar ISO
9126
est contemplada en el
caractersticas de
funcionalidad y la filosofa
no autorizado, fortuito o
planteamiento de calidad
conceptos de seguridad
implementacin de buenas
dentro de su estructura.
Modelo CMM
Es un modelo que
suministra a las
organizaciones una
11
de acercamiento a la mejora de
establecer el proceso de
el aspecto de seguridad
especficamente el manejo de la
seguridad se encuentra
caracterstica de la calidad.
SPICE
procesos de software y
filosofa es determinar la
estandarizacin existentes
mtodos y normas
su objetivo general; no se
dimensiones de seguridad
software especficamente.
software seguro.
Fuente: Gasca G (2006)
2.2.2
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 ingeniera de software, van ms all de la
construccin del producto y trascienden dentro del proceso de software, de ah que
la preocupacin de diferentes organizaciones expresen el inters por crear y
proponer estndares, metodologas y mtodos que contemplan la seguridad desde
el punto de vista del proceso y la enmarquen como una caracterstica de calidad del
software importante para su desarrollo, es el caso del planteamiento de la norma ISO
9126, un estndar internacional para la evaluacin 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 consideracin que los productos
software son parte del inventario de tecnologa de la informacin 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
ITIL para determinar cmo 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 incorporacin de la Ingeniera de
Seguridad en las organizaciones. SSE-CMM divide la ingeniera de seguridad en tres
reas bsicas: riesgo, ingeniera y aseguramiento. La relacin de estas reas con el
objetivo del presente artculo est dada por los siguientes argumentos:
13
Aseguramiento,
tiene
como
objetivo
certificar
que
las
soluciones
PA03. Valoracin de
riesgos de seguridad
PA10. Especificar
necesidades de
seguridad
PA11. Verificacin y
Validacin de la
Seguridad.
software
de Ingeniera de Sistemas
organizacional.
PA18. Mejorar el Proceso
de Ingeniera de Sistemas
organizacional.
aspiraciones y
directrices de la
Administracin.
PO8. Administrar la
Calidad.
PO9. Valoracin y
administracin de
riesgos.
Fuente: Tovar E y colaboradores (2006)
15
AI2. Adquirir y
mantener
aplicaciones
software.
AI7. Instalacin y
acreditacin de
soluciones y
seguridad
cambios.
Fuente: Tovar E y colaboradores (2006)
Tabla 6 Seguridad y COBIT, dominio entrega y soporte
rea de proceso
prestados por
desarrollo de software.
terceros.
DS5. Garantizar la
seguridad de los
sistemas.
DS10.
Administracin de
problemas.
16
los aspectos
relacionados con la
Gestin de Incidentes y
Gestin de Problemas
Provisin del Servicio: En
Gestin de Disponibilidad
y Gestin de Continuidad
de Servicios.
Productos obtenidos, para cada uno de los cuales se debe realizar una
rigurosa validacin y verificacin que cumple con los estndares y requisitos
de seguridad declarados
La figura 1 esquematiza los puntos coincidentes entre los modelos en relacin
Definicin prcticas de
seguridad
Necesidad de
definicin
Modelos software
Niveles de madurez
SSE-CMM
COBIT
ITIL
Administracin
productos software
Definicin explcita
requerimientos de
seguridad
18
Gua OWASP
El proyecto abierto de seguridad en aplicaciones web (OWASP por sus siglas
ESAPI, en total para la versin del 2008 provee 49 proyectos de ms de 300 pginas
cada una de ellas (OWASP, 2008).
Fernndez J. (2006), explica el ciclo de desarrollo de aplicaciones y servicios
Web seguras con OWASP mediante la figura 2.
20
El modelo consta de tres niveles de madurez definidos para cada una de las
doce prcticas de seguridad. Estas definen una amplia variedad de actividades a las
que una organizacin se puede adherir para reducir los riesgos de seguridad e
incrementar el aseguramiento del Software. Se incluyen detalles adicionales para
medir el desempeo exitoso de las actividades, entender los beneficios del
aseguramiento asociado, estimar los costos de personal y otros costos.
2.2.5
Descripcin
Las fallas de inyeccin, tales como SQL, OS, y LDAP,
ocurren cuando datos no confiables son enviados a un
intrprete como parte de un comando o consulta. Los datos
hostiles del atacante pueden engaar al intrprete en
ejecutar comandos no intencionados o acceder datos no
autorizados.
A2 Prdida de
autenticacin y
gestin de sesiones
21
A3 Secuencia de
Las fallas XSS ocurren cada vez que una aplicacin toma
comandos en sitios
cruzados (XSS)
A4 Referencia
directa insegura a
objetos
los
atacantes
pueden
manipular
estas
Una
buena
seguridad
incorrecta(defectuosa
configuracin de
seguridad, 2010)
Todas
estas
seguridad
requiere
configuraciones
tener
deben
ser
definida
definidas,
datos sensibles
datos
(almacenamiento
criptogrfico
inseguro, 2010)
sensibles,
tales
como
tarjetas
de
crdito
control de acceso a
restriccin de acceso
a URL, 2010)
A8 Falsificacin de
peticiones en sitios
cruzados (CSRF)
componentes con
vulnerabilidades
conocidas
componentes
con
vulnerabilidades
conocidas
reenvos no validados
2.2.6
Microsoft SDL
El mtodo 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
malvolo de un intruso. El proceso consiste de una serie de actividades de seguridad:
23
Security training
Security
Security
design
Kickoff
best
Create
development
security
Prepare
Security
tools &
documenta
security
push
security best
tion an
response
Threat
dev, test
tools for
plan
modeling
practices
product
Security
Architecture
practices
Requirements
Use security
Design
Implementation
Security
service
and
response
Pen
execution
testing
Verification
Release
Support
SDL-Agile
A diferencia del SDL clsico, donde todos estos requisitos deben ser
completados antes de que el producto sea liberado, en SDL Agile slo uno de los
requisitos de cada cubo se debe completar en cada sprint. Esta es la concesin que
SDL Agile hace a los horarios de liberacin ms 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 ms que se ha sacado.
La figura 5 muestra el flujo de de trabajo del mtodo SDL Agile.
The every-sprint requirements
Threat model
Run AppVerif
Privacy review
And so on
And so on
And so on
And so on
24
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 ao. Adems, los equipos se les
prohbe completar el requisito de mismo cubo en dos carreras en una fila. Por
ejemplo, si el equipo del proyecto X elige para completar un anlisis de la superficie
de ataque para satisfacer sus requisitos de verificacin de seguridad para su cubo
de marzo de sprint, que no puede completar otro anlisis de la superficie de ataque
en abril. Ms concretamente, se podra completar otro anlisis de la superficie de
ataque en abril si de verdad quera, sin embargo, simplemente no podra 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 ningn tipo de orden de seleccin de requerimiento. Este producto ofrece a los
equipos la mxima flexibilidad en la eleccin de las actividades de seguridad que se
encuentran ms tiles.
2.2.8
paso para identificar las tcnicas de mitigacin que eliminan las causas de las
vulnerabilidades. Las tcnicas de mitigacin 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
repeticin de problemas de seguridad y vulnerabilidades, almacenndolos en una
base de datos de vulnerabilidades que proporciona la informacin sobre las clases
de vulnerabilidades y tipos de errores generales; el S3P puede ser aplicado en el
proceso OpenUP
2.2.9
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
tambin se identifican nuevos riesgos, se evala la efectividad de la poltica, costes
y cambios tecnolgicos. 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 algn punto dbil, este es el momento de corregirlo o mejorarlo a travs
de la implementacin de medidas correctoras, preventivas y de mejora identificada
en el SGSI.
Puyo R. (2009), Oficial de seguridad de la Oficina de Normalizacin Previsional
[ONP] del Per, afirma que la buena aplicacin de la norma requiere una adaptacin
a la organizacin. Consecuentemente, la figura 8 y la figura 9 muestran la adaptacin
de la metodologa ISO 27001 a la ONP.
27
2.3
las prcticas de la programacin extrema (XP, por sus siglas en ingls), las prcticas
del Desarrollo dirigido por pruebas (TDD, por sus siglas en ingls) y los principios,
conceptos y prcticas de Scrum.
2.3.1
Manifiesto gil
Beck K y Colaboradores (2001), definieron los principios sobre los que se basan
de estos valores:
30
Cuando se crea un nuevo proyecto de equipo utilizando la plantilla de MSFAgile proceso, una pgina de conceptos delineando la orientacin 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. Tambin puede acceder a esta informacin
desde la pgina principal del portal del proyecto.
La configuracin de la herramienta va mucho ms all de la descripcin 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:
Informes
Portal
2.3.3
Artefactos agile UP
El proceso unificado gil (AUP) es un desarrollo de programas basado en el
La figura 11
Prcticas XP y TDD
Palacio J (2005), afirma que el Extreme Programming (XP) surge sobre la
Prcticas de codificacin
o
Prcticas de desarrollo
o
34
Asumir la propiedad colectiva del cdigo, para que todo el equipo sea
responsable de l.
Prcticas de negocio
o
Yepes R y Chavarra R (2010), afirman que para un buen feedback, los equipos
XP requieren buenas prcticas de testing. Estos equipos practican test-driver
development (TDD) en pequeos ciclos en los que primero agregan un test y luego
escriben el cdigo fuente necesario para pasar dicho test. De esta manera los
equipos producen cdigo fuente con cerca del 100% de cobertura. La figura 12 ayuda
a entender estos conceptos.
35
Los test son ejecutados en forma conjunta. Cuando los desarrolladores liberan
cdigo al repositorio, cada uno de los test deben pasar satisfactoriamente, lo que
significa que los desarrolladores tendrn un feedback inmediato a cerca de cmo
estn haciendo su trabajo. Esta comprobacin 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 mtodo de una clase, buscando exactitud
a la hora de identificar rpidamente cuales instrucciones estn fallando en un
escenario determinado. Mientras que las pruebas de integracin, son realizadas a
dos o ms 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 interaccin
real con sus dependencias haya problemas que nicamente son detectados con los
test de integracin.
As el anlisis de cdigo y pruebas unitarias pueden validar que los cambios de
cdigo mitigan la vulnerabilidad expuesta por el defecto de cdigo identificado
previamente.
2.3.5
Prcticas Scrum
Schwaber K y Sutherland J (2010), autores de Scrum, definen que Scrum se
que es
Equipos autogestionados.
Reuniones diarias en las que los miembros del equipo se plantean 3 cuestiones:
software.
39
CAPTULO 3
MATERIALES Y MTODOS
3.1
Lugar de ejecucin
Esta investigacin se realiz en el campus de la Universidad Peruana Unin
Equipos y materiales
Los equipos y materiales empleados para la realizacin de la presente
investigacin son:
3.2.1
Equipos
3.2.2
Software
3.2.3
Servicios
3.2.4
Impresiones y Fotocopias
Material bibliogrfico
3.3
Tipo de investigacin
La presente investigacin es de tipo evaluativa aplicada. Ya que evala los
METODOLOGAS BASE DE
SEGURIDAD DEL
SOFTWARE: SSECMM/ISO 21827, OWASP
METODOLOGAS DE
PROCESOS
DESARROLLO DE
SOFTWARE: SCRUM,
Agile UP
41
Indicador
Porcentajes de
vulnerabilidades
controladas.
identificadas
Velocidad del
equipo gil de
semanas
Descripcin
90%
20 puntos historia
(en la primera
desarrollo.
3
Promedio ideal
iteracin)
Porcentaje de
mtodos que
cumplen el estilo
de la aplicacin
80%
de codificacin .
4
Porcentaje de
lneas de cdigo el
la toda la aplicacin
70%
estndares de
codificacin.
5
Porcentaje de
artefactos
80%
desarrollados.
proteger. Sin embargo, toda aplicacin 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 funcin 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 codificacin a nivel de mtodos y de lneas de cdigo, que comnmente 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.
43
3.5
Definicin de la propuesta
Validacin de la propuesta
Documentacin de la tesis
Propuesta invlida
Propuesta OK
Anlisis de resultados y
elaboracin de conclusiones
Tesis OK
44
45
3.6
Cronograma de actividades
El desglose del trabajo realizado, luego de la organizacin y planificacin de la
Fase
A M J
ANLISIS DE METODOLOGAS
Organizacin de bibliografas
Anlisis de metodologas de DESARROLLO DE SOFTWARE
Anlisis de metodologas de SEGURIDAD DE INFORMACIN
Revisin de la seguridad de los frameworks emergentes para los
lenguajes de programacin giles y tradicionales.
DEFINICIN DE LA PROPUESTA
Elaboracin 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
Elaboracin 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.
46
J A
O N D
47
3.7
Descripcin
Unid.Med.
Cantidad
P.U.
SubTotal S/.
MATERIALES Y EQUIPOS
5,000.00
Unidad
4,500.00
4,500.00
Memoria USB
Unidad
50.00
50.00
Textos
Unidad
90.00
450.00
SOFTWARE
.00
Python
Lic. Libre
0.00
0.00
Sublime Text 2
Lic. Libre
0.00
0.00
Enterprise Architect 5
Lic. Trial
0.00
0.00
Balsamiq
Lic. Trial
0.00
0.00
Git
Lic. Libre
0.00
0.00
SERVICIOS DE TERCEROS
1,500.00
Modem + Internet
Ao
1,000.00
1,000.00
Hosting
GB
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 CONSULTORA 1
15,000.00
Asesor de la tesis
RR.HH.
1,000.00
1,000.00
Tesista
RR.HH.
5,000.00
5,000.00
Analista-programador (backend)
RR.HH.
9,000.00
9,000.00
SERVICIOS DE CONSULTORA 2
12,000.00
RR.HH.
2,000.00
2,000.00
RR.HH.
2,000.00
2,000.00
Analista
RR.HH.
2,000.00
2,000.00
Programador
RR.HH.
2,000.00
6,000.00
2,380.00
OTROS GASTOS
1,500.00
PASAJES Y VITICOS
1,000.00
Imprevistos
1,000.00
500.00
Total S/.
37,380.00
48
Descripcin
Importe S/.
Financiamiento propio
19,380.00
Financiamiento UPeU
6,000.00
12,000.00
Total S/.
37,380.00
49
CAPTULO 4
4.1
Introduccin
En este captulo se describe el principal resultado del trabajo de tesis: el modelo
propuesto y sus elementos. Para una rpida identificacin del modelo propuesto, en
adelante se denominar por sus siglas en ingls WSM-DEV (Web-application
Security Model for Development).
4.2
Principios de seguridad
Defensa en profundidad
Proveer a la aplicacin ms de un punto de defensa; la ltima lnea de defensa
Privilegios especficos
Definir perfiles de usuario especficos; los roles o funciones de los usuarios bien
Seguimiento
Guardar en bitcoras los sucesos del sistema ocasionados por las acciones de
usuarios e intrusos. Esto permitir conocer cmo la aplicacin est siendo atacada.
A continuacin se detallan las prcticas de seguridad de este modelo.
4.4
aplicacin web requiere antes de iniciar con su desarrollo, sobre todo los
componentes de seguridad, as como el estilo de codificacin. El objetivo es definir
una lnea 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 construccin de una aplicacin 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 codificacin de
la aplicacin. 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 aplicacin en particular.
Para iniciar el desarrollo de una aplicacin, lo mnimo que se necesita es que
estos componentes de seguridad deben estar debidamente implementados, as
como los otros componentes o libreras de utilidad de desarrollo de una aplicacin
web.
Las caractersticas del backend web seguro a usar o a desarrollar debe
satisfacer las caractersticas de la aplicacin web a desarrollarse, ms no al revs.
Si esto sucede, es necesario definir tareas de personalizacin al backend.
Por lo general, un Backend web seguro para aplicaciones web tipo SaaS, debe
tener las siguientes caractersticas: gestionar de manera rpida y segura a los
usuarios, perfiles, permisos, recursos del sistema, mdulos del sistema, mens
dinmicos, empresas, sucursales entre otros parmetros de configuracin del
sistema. De modo que los siguientes mdulos puedan reutilizar los mismos
componentes de seguridad, mensajera, auditora, plantillas web, sesiones y tokens
52
Herramientas
Salidas
Arquitectura de la aplicacin
Estndares de desarrollo
Prototipos principales
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 diseos
de los componentes de software y los componentes de software. En base a la
53
principales que define la visin de todo el proyecto (o de todo el mdulo). Vale sealar
que estn incluidos los requisitos de seguridad y expectativas del cliente
debidamente priorizados y estimados. Este listado contiene las siguientes partes:
Nombre del proyecto
Fecha de actualizacin
Listado de los requisitos con propiedades bsicas.
La plantilla para los requisitos del sistema puede verse en el anexo A1.
4.5.2
4.5.3
Arquitectura de la aplicacin
La arquitectura de la aplicacin es un esquema que muestra las capas de la
aplicacin, las interacciones entre las capas basado en una arquitectura estndar y
las tecnologas que se usan para implementar cada capa. Este esquema muestra de
forma holstica el nivel de calidad y seguridad de la aplicacin. Este documento
consta de:
Informacin general
Historial de revisiones
Esquema de la arquitectura de la aplicacin (cuadro o grfico)
Estndares de desarrollo
El estndar de desarrollo es un documento que indica cmo se debe de
55
Un estndar de desarrollo
contiene:
Informacin general
Historial de revisiones
Trminos de definicin de identificadores
La plantilla del mtodo de trabajo del equipo puede verse en el anexo A6.
4.5.7
Prototipos principales
Los prototipos principales son las interfaces grficas del usuario diseado
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 diseo del sistema son los nicos
artefactos que se necesitan para delegar tareas al equipo de desarrollo en un modelo
clsico, estos artefactos son reemplazados por los ejemplos de aceptacin para un
modelo gil. Un prototipo responde:
Proyecto
Mdulo
56
Fecha
Requisito
Imagen de la Interfaz grfica del usuario
Funcionalidad
Personal que aprueba la interface
actual del diseo del sistema y contiene los diagramas de clases de diseo. Un
diseo del sistema indica los componentes del sistema, sus relaciones de
dependencia, las restricciones y reglas de negocio que deben ser probadas y
validadas. El diseo debe relejar los estndares 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.
4.6
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 estndares se elaboran los prototipos
principales de toda la aplicacin o al menos de la primera iteracin y son usados en
la validacin y priorizacin 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 diseo
del sistema para todos los requisitos seleccionados de la Iteracin. Cada componente
del diseo del sistema debe estar debidamente documentado las reglas de negocio
y las restricciones de seguridad. El diseo debe reflejar el estndar de desarrollo, las
tcnicas o estilo de codificacin y la arquitectura de la aplicacin.
Las tareas para solucionar los errores y vulnerabilidades de la Iteracin anterior
e incluso las observaciones en el diseo de los requisitos seleccionados deben ser
rediseados y solucionados durante la Iteracin en curso.
El grupo de procesos de anlisis de riesgos de seguridad se puede evidenciar
entonces en la Iteration planning meeting obteniendo como resultado el registro de
componentes de seguridad.
Entradas
Herramientas
Salidas
Entradas actualizadas
Las plantillas de los artefactos pueden revisarse en los anexos referidos para los
artefactos del backend web seguro.
4.8
59
1. Filtrar entradas, con el fin de asegurar que los datos de entrada sean
vlidos.
2. Escapar salidas, para asegurar que los datos salientes no se
malinterpreten.
Las buenas prcticas 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 vlidos; 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 fabricacin de software, estos
componentes son desarrollados por un equipo central, dedicados a la investigacin
y mejora de los componentes claves de la aplicacin y, a dar soporte y capacitacin
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 codificacin para todo el proyecto, pues, frente a
un problema se tiene ms de una forma de solucionarlos; pero solo una forma es la
correcta para el proyecto en cuestin.
El grupo de procesos de implementacin de los componentes de seguridad se
puede evidenciar en el Security training meeting y por las herramientas de revisin y
validacin automatizadas y manuales obteniendo como resultado el Incremento o
producto funcional seguro.
Entradas
Herramientas
Salidas
tareas definidas para la iteracin o la suma de ellos juntamente con los objetivos de
seguridad.
4.10 Demostracin y validacin de la seguridad
El objetivo de este grupo de procesos es revisar el cumplimiento de los
objetivos de seguridad del proyecto mediante la presentacin de resultados, se
realizan procesos de anlisis, revisin y medicin que permitan certificar que el
Incremento es confiable y las acciones correctivas necesarias.
Los procesos de anlisis, revisin y medicin se realizan de forma manual y
automtica. Las herramientas de Integracin Continua permiten automatizar estos
procesos. Por ejemplo, en un proceso TDD, la cobertura de la pruebas aceptable
promedio es del 80%. Estos parmetros de medicin 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 iteracin se debe presentar el resultado de la iteracin para su
aceptacin. Con respecto a la seguridad, se debe hacer pruebas de intrusin con el
fin de encontrar nuevas o recurrentes vulnerabilidades de tal manera que se lleven a
cabo acciones correctivas en la prxima iteracin.
El grupo de procesos de demostracin y validacin de la seguridad se puede
evidenciar mediante las reuniones de revisin de la iteracin y herramientas de
validacin automatizadas y manuales obteniendo como resultado el registro de
riesgos de seguridad actualizado y las lecciones aprendidas.
61
Entradas
Incremento seguro
Herramientas
Salidas
Lecciones aprendidas
62
63
CAPTULO 5
WSM-DEV PARTE 1
5.1
Introduccin
En este captulo se describe la aplicacin y validacin 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 captulo.
Para ambas partes se realizan mediante el desarrollo de una aplicacin web
para la cadena productiva de alpacas (patrocinado por CONCYTEC y la UPeU en el
ao 2013) denominada Qualpaca versin 1.0
Con la aplicacin y validacin de esta primera parte del modelo WSM-DEV se
obtuvo el segundo resultado o aporte del trabajo de tesis: El mdulo backend de
administracin y configuracin de aplicaciones web seguras en la nube escrita en
Django y Bootstrap. Y que tambin sirve como referencia para la construccin de del
mdulo backend con otros framewroks o lenguajes de programacin.
5.2
5.2.1
presentado por la Dra. Nlida Gladys Maquera Sosa y la UPeU (Universidad Peruana
Unin) en el ao 2013 al CONCYTEC denominado Desarrollo de plataforma
64
Qualpaca 1.0
Qualpca 1.0, es el nombre de la plataforma tecnolgica en la web para la
Materiales y mtodos
Qualpaca versin 1.0 fue desarrollado con tecnologas 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 mtodo Scrum y para la seguridad el mtodo 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. Nlida Gladys Maquera Sosa, Gerente General de la
empresa Grupo InnOp Per EIRL.
65
solo se saba a grandes rasgos que se desarrollara una aplicacin web para mejorar
la cadena productiva de alpacas. El sistema tendra que registrar los datos
genealgicos y datos de produccin de las alpacas iniciando por todos los
productores de la regin Puno.
Despus de revisar los procesos de la cadena productiva de alpacas en
diferentes instituciones dedicados a la crianza de alpacas de la regin Puno y con la
asesora del Ing. Eliphas Coeli de la Universidad de Camerino de Italia, se defini la
visin del proyecto.
Seguidamente, se opt por aplicar los mtodos Scrum y WSM-DEV, el lenguaje
de programacin gil Python y el framework Django, que para ese entonces solo se
tena una versin 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 ao (seis
meses despus). Sin embargo, mientras se esperaba la primera entrega del backend
para Django, se inici a disear el sistema.
Los prototipos del sistema se validaron el 14 de junio de 2013 en una reunin
con los representantes de las diferentes instituciones dedicados a la crianza de
alpacas de la regin Puno que se llev a cabo en el auditorio de la Direccin General
de Sistemas (DIGESI) de la UPeU Filial Juliaca. Para el 21 de junio ya se tena
actualizado el diseo en UML de todo el sistema y desplegado en un servidor privado.
En dicho reporte UML tambin se indic la Arquitectura de la aplicacin donde cada
componente segua los estndares de desarrollo previamente definidos. As mismo,
se llev a cabo la reunin de Project definition donde se aprob el acta de constitucin
del proyecto. Sin embargo, no poda iniciar el desarrollo mientras no se tena el
backend de administracin que el modelo WSM-DEV requiere.
Para fines de octubre del 2013 se public una versin beta del backend para
Django, que permiti iniciar el desarrollo el 04 de noviembre y terminar el 06 de
diciembre.
66
SQL inyection
Los SELECT vulnerables toman los datos de entrada como vlidos si pasar por
ningn filtro. OWASP recomienda usar una API que permita parametrizar los datos
de entrada por separado.
Django framework, cuenta con los mtodos 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
authenticate(username=request.POST.get("username"),
password=request.POST.get("password"))
68
5.5.3
general JavaScript, que explotan el intrprete del navegador web. XSS permite a los
atacantes obtener contraseas, llaves, token de sesin, redireccionar un usuario
hacia un sitio de malware o phishing. OWASP recomienda validar las entradas de
datos y seguir el estndar anatmico 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 vlidas, una solucin 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 proteccin XSS, Django
cuenta con el filtro safe:
{{ name|safe }}
5.5.4
Ausencia de Control de Acceso a las Funciones (5.5.7), los usuarios son capaces de
acceder a recursos y datos sin autorizacin. Un atacante modifica la URL o el valor
del parmetro 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).
Adems de las recomendaciones de la OWASP, para una rpida proteccin al
acceso a datos se debe generar y comprobar llaves de seguridad combinada con el
valor de parmetro.
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):
69
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
tiene o no permiso.
from apps.utils.decorators import permission_resource_required
@permission_resource_required
def my_view(request):
...
headquar_list =
Headquar.objects.filter(enterprise_id=UserToken.get_enterprise_id(request.
session)).order_by("-id")
70
5.5.5
de produccin. Las claves de seguridad son los mismos del entorno de desarrollo,
los archivos de ejemplos y URL conocidos estn expuestos al pblico, la aplicacin
muestra el detalle completo de los errores. Por suerte, los nuevos frameworks
permiten configurar estos parmetros de forma simple. OWASP recomienda usar
diferentes contraseas para los entornos de Desarrollo, Aseguramiento de la calidad
(QA) y Produccin. Una fuerte arquitectura de la aplicacin que proporcione una
separacin segura y efectiva entre los componentes. Y realizar auditoras
peridicamente para ayudar a detectar fallos de configuracin.
Adems de las recomendaciones de la OWASP, la configuracin del entorno
de produccin se debe instalar las dependencias necesarias, dejando fuera
herramientas de integracin, depuracin, pruebas entre otros. Esta prctica,
incrementa el tiempo de respuesta de las peticiones HTTP.
Django provee un archivo de configuracin que maneja toda la aplicacin
comnmente denominado settings.py cuyas variables de configuracin ms
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'
71
TEMPLATE_DEBUG = DEBUG
ALLOWED_HOSTS = ['*',]
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
72
if authenticate(username=
request.POST.get("password")):
request.POST.get("username
"),
password=
...
5.5.7
Referencia directa Insegura a objetos (5.5.4), los usuarios son capaces de acceder a
recursos y datos sin autorizacin. Un atacante modifica la URL o el valor del
parmetro de una funcin con privilegios. Las recomendaciones del OWASP y los
componentes de seguridad son los mismos de la seccin 5.5.4.
73
5.5.8
datos, sino que manipulan el contenido de los datos de los parmetros de la URL
para realizar transacciones fraudulentas con o sin intencin del usuario. Ms an,
estos datos pueden provenir de URLs maliciosos. OWASP recomienda la inclusin
de un token no predecible (secreto) en cada solicitud HTTP. Estos tokens deben ser,
como mnimo, nicos para cada sesin del usuario.
Django genera automticamente un token secreto para cada sesin del usuario
y por defecto son validados en cada solicitud HTTP; es decir en cada accin o
mtodo:
Para peticiones con formularios:
<form action=" >
{% csrf_token %}
</form>
@csrf_exempt
def func_index(request):
"""
"""
74
'ngRoute',
5.5.9
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'),
)
75
'formatter': 'verbose_dj'
},
try:
self.get_object()
except Exception, e:
log.warning(e, extra=log_params(self.request))
76
@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)
77
dj ango.contrib.auth.models::
AbstractUser
User
-
last_headquar_id: CharField
last_module_id: CharField
__unicode__( ) : self.username
+user_set
date_joined: DateTimeField
email: EmailField
first_name: CharField
is_active: BooleanField
is_staff: BooleanField
last_name: CharField
username: CharField
0..*
dj ango.contrib.auth.models::
Permission
+
__unicode__( ) : self.name
+permissions
0..*
+groups
+group_set 0..*
0..*
dj ango.contrib.auth.models::Group
+
__unicode__( ) : self.name
78
params/models.py::Person
-
birth_date: DateField
first_name: CharField
identity_num: CharField
last_name: CharField
photo: ImageField
+menu_set 0..*
+person
Menu
+
dj ango.contrib.auth.models::
AbstractUser
+user 0..1
__unicode__( ) : self.title
+menu_set
0..1
+parent 0..1
User
0..*
last_headquar_id: CharField
last_module_id: CharField
__unicode__( ) : self.username
1
+permission
+user_set
0..1
date_joined: DateTimeField
email: EmailField
first_name: CharField
is_active: BooleanField
is_staff: BooleanField
last_name: CharField
username: CharField
0..*
0..*
dj ango.contrib.auth.models::
Permission
+
UserEnterprise
__unicode__( ) : self.name
+permissions
0..*
+userenterprise_set
0..*
0..*
+userenterprise_set
+groups
+enterprise
+group_set 0..*
0..* +group
1
space/models.py::Enterprise
dj ango.contrib.auth.models::Group
+
enumeration
MODULE_CHOICES
BACKEND = Backend Manager
WEB = Web informativa
VENTAS = Ventas
__unicode__( ) : self.name
+groups
0..*
+initial_groups
0..*
is_active: BooleanField
is_actived: BooleanField
logo: ImageField
name: CharField
tax_id: CharField
__unicode__( ) : self.name
0..*
+module_set
0..*
+initial_groups_module_set 0..*
+enterprise_set
Module
+
__unicode__( ) : self.name
+module_set
0..*
+solutions
0..*
space/models.py::Solution
-
created_at: DateTimeField
description: CharField
is_active: BooleanField
is_actived: BooleanField
+solution
name: CharField
0..1
price: FloatField
test_date: DateTimeField
test_image: ImageField
updated_at: DateTimeField
__unicode__( ) : self.name
Como Django, guarda los accesos a los mtodos en la tabla de base de datos
Permission. Estos permisos estn 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)
@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)
...
80
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
Resumen
El mdulo backend web seguro defini las caractersticas arquitectnicas de
seguridad de una aplicacin web, as como el estilo de codificacin para el resto del
proyecto.
81
CAPTULO 6
WSM-DEV PARTE 2
6.1
Introduccin
En este captulo se describe la aplicacin y validacin de la segunda parte del
82
6.5
Resumen
La aplicacin del modelo WSM-DEV, gracias a sus plantillas y a su backend
84
CAPTULO 7
RESULTADOS Y DISCUSIN
86
CAPTULO 8
CONCLUSIONES Y RECOMENDACIONES
Conclusiones
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
prcticas de seguridad durante el ciclo de desarrollo para obtener una aplicacin web
confiable en el menor tiempo. Los procesos del SSE-CMM guiaron la definicin de
los componentes del WSM-DEV y las diez vulnerabilidades ms frecuentes de la
OWASP definieron las caractersticas de una aplicacin web confiable. Para una
aplicacin rpida, se incluyen plantillas de los artefactos del modelo y una serie de
componentes de seguridad web implementados en el lenguaje de programacin gil
Python. La aplicacin 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 medicin.
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 mtodos al
componente de seguridad UserToken, logrando mitigar el 100% de vulnerabilidades
(respecto a las 13 vulnerabilidades previamente definidas).
8.1.2
manera rpida y segura a los usuarios, perfiles, permisos, recursos del sistema,
mdulos del sistema, mens dinmicos, empresas, sucursales entre otros
parmetros de configuracin del sistema.
Este mdulo se desarroll en dos meses por una sola persona, y permiti la
implementacin directa de los requisitos del proyecto Qualpaca, terminando en cinco
semanas todo el desarrollo.
El estilo de codificacin del backend, permiti la concentracin del equipo y
realizar las tareas del mdulo de produccin del proyecto Qualpaca. Logrando
desarrollar 20 puntos historia en un mes.
El cumplimiento de los estndares de codificacin se verific mediante la
herramienta PEP8 de Python, alcanzado un 90% del cumplimiento.
Finalmente, gracias al backend que sigue un estilo de codificacin, pudo ser
interiorizado en todos los programadores alcanzando ms del 80% del cumplimiento.
8.1.4
como libreras tiles para ser aplicado o gua para las nuevas aplicaciones web que
mitigan trece principales vulnerabilidades de las aplicaciones web.
8.2
8.2.1
Recomendaciones
Completar los test automatizados para el backend web seguro
Para aplicar poder desarrollar una aplicacin web completamente con TDD,
primero se debe terminar de implementar los test de unitarios del mdulo backend.
8.2.2
88
8.2.3
Backend Web seguro con otros frameworks para Python u otros lenguajes
de programacin.
Dado que en el mercado de Per, los lenguajes de programacin ms
es con un backend con los componentes y libreras que una aplicacin web necesita,
sobre todo, debe reflejar el estilo de codificacin que facilitar la revisin de la calidad
del cdigo. 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 aplicacin e integrarlos en el backend
a modo de ejemplo, de modo que el equipo de desarrollo se concentre en atender
los requisitos del proyecto.
89
REFERENCIAS
Laudon K, Laudon J. 2012. Sistemas de Informacin Gerencial. 12 ed. Mxico:
Pearson Educacin. 640 p. ISBN 978-607-32-0949-6.
OWASP, 2013. Una Gua para Construir Aplicaciones y Servicios Web Seguros. The
Open Web Application Security Project [OWASP]. 4da ed. 311 p. Edicin en
espaol
OWASP, 2013. OWASP Top 10 2013 Los diez riesgos ms importantes en
Aplicaciones Web . 22 p. Edicin en espaol
OWASP, 2008. Gua de Pruebas OWASP. 3ra ed. 372 p. Edicin en espaol
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. Linkpings: Linkpings 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. Linkpings: Linkpings University. 124 p.
Gasca G. 2006. Anlisis de Riesgos para el Desarrollo de Software Seguro.
Tovar E y colaboradores, 2006. Desarrollo de Productos de Software Seguros en
Sintona con los Modelos SSE-CMM, COBIT E ITIL
ISO 27001, 2005. Tecnologa de la Informacin Tcnicas de seguridad Sistemas
de gestin de la informacin Requerimientos. 1ra ed. 41 p. Uso para fines
didcticos.
ISO 17799, 2005. Tecnologa de la Informacin Tcnicas de seguridad Cdigo
para la prctica de la gestin de la seguridad de la informacin. 2ra ed. 170
p.
Yepes R y Chavarra 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
Ingeniera, Universidad de Antioqua
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.
90
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 Gestin de Proyectos. Rev 1.4. 131 p.
Palacio J. 2007. Flexibilidad con Scrum. 229 p.
ISO 9000, 2005. Sistemas de gestin de la calidad Fundamentos y vocabulario.
Ginebra, Suiza. 42 p.
Caldern M, 2007. Una Taxonoma de Requerimientos de Seguridad de Software.
Escuela de Ciencias de la Computacin e Informtica, Universidad de Costa
Rica. Artculo de 9 pginas.
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 Gua de Referencia y Modelado. OMG, Quality
Softcover Perfect Bound. 226 p.
INTECO, 2010. Implantacin de un SGSI en la empresa. Instituto Nacional de
Tecnologas de la Comunicacin. Espaa.
NEXUS, 2006. Parmetros fundamentales para la implantacin de un Sistema de
Gestin de Seguridad de la Informacin segn ISO 27001:2005
http://www.nexusasesores.com/docs/ISO27001-norma-e-implantacion-SGSI.pdf
visitado el 18 de abril de 2010.
NTP-ISO, 2006. Tecnologa de la informacin. Procesos del ciclo de vida. (NTPISO/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
91
http://www-01.ibm.com/software/tivoli/library/demos/
Hamilton.
[www.stsc.hill.af.mil/crosstalk/2007/03/index.html].
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 Gestin de la Seguridad de la Informacin SGSI ONP.
Oficina
de
Normalizacin
Previsional
ONP.
http://www.pecert.gob.pe/archi/talle012009/04-caso-onp.pdf Consultado el 08
de Septiembre de 2011
Piero B, 2009. La tecnologa como facilitador del cumplimiento de los controles de
un
SGSI.
crsi.ie.edu/files/documentacion/Catedra_de-riesgos_Oracle.ppt
W.
2005.
Scott
W.
Ambler's
Home
Page.
J,
2005.
Procesos
tcnicas
para
desarrollo
de
software.
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.
93
GLOSARIO
contenido, para impedir daos para la institucin y las personas que salen en la
informacin. Se distingue y divide tres grupos, a) datos e informacin, b) sistemas e
infraestructura y c) personal.
Gestin de riesgo: Mtodo para determinar, analizar, valorar y clasificar el riesgo,
para posteriormente implementar mecanismos que permitan controlarlo. Est
compuesta por cuatro fases: 1) anlisis, 2) clasificacin, 3) reduccin y 4) control de
riesgo.
Seguridad informtica: Procesos, actividades, mecanismos que consideran las
caractersticas y condiciones de sistemas de procesamiento de datos y su
almacenamiento, para garantizar su confidencialidad, integridad y disponibilidad.
Auditora de seguridad: Permitir el registro de eventos (hay que identificar cules
pueden ser interesantes desde el punto de vista de la seguridad).
Gestin de seguridad: Definicin de perfiles de usuario y niveles de acceso
asociados.
Autodefensa: La aplicacin debe incluir sistemas de validacin de su funcionamiento
y fallar de manera segura si esa validacin no se cumple.
Control de acceso: Soporte de sistemas que limiten el nmero y tipo de sesiones,
el nivel de concurrencia y que proporcionen informacin sobre sesiones anteriores al
usuario para ayudar a la deteccin de intrusos.
Estndares de desarrollo: Define estratgicamente el nombre de los identificadores
del sistema, como son variables, clases, funciones, tablas, contantes, etc.
Estilo de codificacin: Provee un orden de las instrucciones del programa para una
clase o mtodo, en funcin de los estndares de desarrollo.
UML: Es el lenguaje de modelado de sistemas de software ms conocido y utilizado
en la actualidad; est respaldado por el OMG (Object Management Group).
95
ANEXOS
Objetivo
Marco terico
Indicadores
Metodologa
O. General.
Antecedentes:
Porcentajes de
Tipo de
dificultades para
Elaborar un modelo de
SSE-CMM
vulnerabilidades
investigacin:
trabajo
OWASP
controladas
Aplicada
o modelos de
desarrollar aplicaciones
seguridad?
Velocidad del
Por qu las
vulnerabilidades) y en el
equipo gil de
Mtodo:
aplicaciones con
desarrollo
Investigacin
requisitos
en los procesos de la
complejos y con
metodologa SSE-CMM,
Porcentaje
lmites de tiempo
el Proyecto OWASP y
mtodos
han contribuido al
experiencias vividas.
cumplen el estilo
prctico
para
Evaluativa
incremento de
de
que
de codificacin
fallas o
Objetivos especficos:
Porcentaje
vulnerabilidades
lneas de cdigo
de software?
SSE-CMM respecto al
el que cumplen
ciclo
los
de
vida
del
desarrollo de software.
Cuales son las
Implementar los
causas
controles de seguridad
que
ocasionana
grandes prdidas
para un
monetarias,
lenguaje/framework
hasta la prdida
especfico.
de confianza de
los
clientes,
empleados
socios
negocio?
y
de
el
estndares
de codificacin
proponer.
Refinar
de
modelo
mediante su aplicacin
en un proyecto web tipo
SaaS.
96
Requisito
RF01
/1
Requisito 1:
Descripcin:
RF02
/1
RF03
/1
RF04
/2
97
Estado
Estimac.
Prioridad
Nuevo
8
puntos
historia
1000
En
Progreso
6
puntos
historia
900
Retirado
4
puntos
historia
800
Hecho
4
puntos
historia
700
Riesgo de seguridad
A: Amenza V: Vulnerabilidad
Probabilidad: Alta, Media, Baja
Impacto: Alta, Media, Baja
98
Tipo
(A/V)
Probab
ilidad
Impac
to
Priori
dad
1000
Componente de
seguridad
Riesgos de seguridad
99
2. Historial de revisiones
Versin
- Fecha
- Elaborado por
Vista: V
Tecnologa
Django Model
Django Manager
Django Test/Unit Test
Django View
Django Form
SAD Backend
Django Test
Template: T
Django Template
Bootstrap
JQUERY
AJAX+ JSON
SAD Frontend
Selenium
100
Funcin
Entidades y mapeamientos
Extiende utilitarios del Model
Pruebas unitarias del modelo
Controlador de solicitudes y respuestas
Reglas de negocio y restricciones
Solicitudes y respuestas con AJAX
Restricciones de seguridad
Logs
Mensajera y Notificaciones
Pruebas de integracin de las vistas y de
los formularios
Interfaces grficas de usuario para las
entradas de datos y mostrar resultados
Diseo responsivo multidispositivo
Utilitarios diversos
Solicitudes y respuestas asncronas
Solicitudes y respuestas con AJAX
Generacin de objetos HTML en tiempo
de ejecucin
Hojas de estilos personalizados
Pruebas funcionales en la Web
2. Historial de revisiones
Versin
- Fecha
- Elaborado por
Trmino
Ejemplo
Proyecto
Paquetes
Base de datos
Tablas
Atributo PK
Atributo
Atributo FK
Paquetes
Clases
Variables
Contantes
Mtodo
<nombre_proyecto>
<nombre_carpeta>
<nombre_db>
<prefix_nombre_tabla>
id
<nombre_atributo>
<tabla>_id
<nombre_carpeta>
<NombreClase><NombreCapa/vacio>
<nombre_variable>
<NOMBRE_CONSTANTE>
<nombre_metodo>(var_nombre)
Enumerators
<NOMBRE_ENUM>
Archivos
Interfaces
<nombre_pagina>.<py/html>
I<NombreClase><NombreCapa/vacio>
101
agil_cont
catalogo_productos
agil_cont_db
common_natural_person
id
functional_code
natural_person_id
catalogo_productos
class NaturalPerson
functional_code
DEFAULT="DNI"
def add();
def edit();
def delete();
def get_by_id(id);
def get_list_by_filter(filter);
DEFAULT="DNI"
CE="CE"
OTHERS="OTHERS"
IDENTITY_CHOICES = (
(DEFAULT, "D.N.I."),
(CE, "C.E."),
(OTHERS, "Otro.")
)
natural_person.html
INaturalPersonService
2. Historial de revisiones
Versin
- Fecha
- Elaborado por
3. Equipo de trabajo
Rol
Product Owner
Scrum Master
Dupla 1-Doc.
Dupla 2-Dev.
Dupla 3-Dev.
Nombre
Nombre del cliente
Nombre del Jefe del proyecto
Nomb. Programador 1
Nomb. Programador 2
Nomb. Programador 3
Nomb. Programador 4
Nomb. Programador 5
Nomb. Programador 6
Ciudad
Correo/Celular
Tiempo
50%
50%
50%
50%
100%
100%
50%
50%
4. Herramientas
Elemento
Portal de
gerenciamiento
Portal de
integracin
Modelo y
Prototipado
Lenguaje de
programacin
Frameworks
Framework
responsivo
Base de datos
IDE
Comunicaciones
Herramienta
Assembla.com
Hosting
Github.com
https://github.com/submitconsulting/django_backend_project
Enterprise
Architect 7.5
Balsamiq
Python
http://djangobackend-model.appspot.com
https://www.assembla.com/spaces/djangobackend
Django 1.6.2
Bootstrap
MySQL 5.x
Sublime Text 2
Facebook
https://www.facebook.com/groups/262927820527361
102
5. Retos a superar
Desafo
Respecto a la metodologa scrum
Solucin
Definir la duracin del sprint a 4 semanas
Lea la wiki y utilice el foro de discusin del portal de
gerenciamiento (Mensajes)
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)
Documentacin en ingls
Respecto a la documentacin
Falta de compromiso del cliente
103
Imagen N
Funcionalidad:
Aprobado por:
104
INFORMACIN GENERAL
Cdigo y Nombre del proyecto:
HISTORIAL DE REVISIONES
Versin - Fecha
ACTUALIZACIONES IMPORTANTES
105
106
RF01
/1
Requisito
Estado
Hecho
Para ello:
Definir los recursos (permisos en django) del sistema a partir del
mdulo "auth" de django
Definir los Grupos de usuarios a partir del mdulo "auth" de django
Definir los permisos de los Grupos de usuarios.
RF02
/1
RF03
/1
Hecho
Hecho
Para ello:
Definir Men para los recursos del sistema y organizados por Mdulos
RF04
/1
RF05
/1
107
Hecho
Hecho
Estimac.
(horas)
Prioridad
RF06
/2
RF07
/2
Hecho
Hecho
Para ello:
Registrar, bloquear, reactivar usuarios a partir del mdulo "auth" de
django y bajo los permisos preasignados a la
sede/empresa/asociacin que se est administrando.
Estas validaciones de los permisos se logra gracias a los:
Componentes para asegurar los recursos de la aplicacin
Componentes para asegurar los datos de las empresas
(Token de acceso a datos)
RF08
/2
RF09
/2
108
Hecho
Hecho
Riesgo de seguridad
Inyeccin
Prdida de Autenticacin y Gestin de Sesiones
Secuencia de Comandos en Sitios Cruzados(XSS)
Referencia Directa Insegura a Objetos
Configuracin de Seguridad Incorrecta
Exposicin de Datos Sensibles
Ausencia de Control de Acceso a las Funciones
Falsificacin de Peticiones en Sitios
Cruzados(CSRF)
Uso de Componentes con Vulnerabilidades
Conocidas
Redirecciones y reenvos no validados
Repudio
Datos incompletos
Permisos inconsistentes
A: Amenza V: Vulnerabilidad
Probabilidad: Alta, Media, Baja
Impacto: Alta, Media, Baja
109
Tipo
(A/V)
A
A
A
A
A
A
A
A
Probab
ilidad
Alta
Alta
Alta
Alta
Alta
Alta
Alta
Alta
Impac
to
Alta
Alta
Alta
Alta
Alta
Alta
Alta
Alta
Priori
dad
1000
1000
1000
1000
1000
1000
1000
1000
Alta
Alta
1000
A
A
A
A
Alta
Alta
Alta
Alta
Alta
Alta
Alta
Alta
1000
1000
1000
1000
Componente de seguridad
Django model.objects.filter
Django request. session
Riesgos de seguridad
Inyeccin
Prdida de Autenticacin y Gestin de Sesiones
django.contrib.auth.authenti
cate
django.contrib.auth.login
django.contrib.auth.logout.
apps.utils.security.UserToken
django form
django filter safe
apps.utils.decorators.permiss
ion_resource_required
apps.utils.security.
SecurityKey
Django request. POST
Django.forms. ModelForm
apps.utils.decorators.permiss
ion_resource_required
apps.utils.security.
SecurityKey
Django settings.DEBUG
django.conf.urls.url
apps.utils.decorators.permiss
ion_resource_required
apps.utils.security.
SecurityKey
Django csrf_token
crispy form
django.conf.urls.url
apps.utils.decorators.permiss
ion_resource_required
110
2. Historial de revisiones
Versin
1.0
Vista: V
Tecnologa
Django Model
Django Manager
Django Test/Unit Test
Django View
Django Form
SAD Backend
Django Test
Template: T
Django Template
Bootstrap
JQUERY
AJAX+ JSON
SAD Frontend
Selenium
111
Funcin
Entidades y mapeamientos
Extiende utilitarios del Model
Pruebas unitarias del modelo
Controlador de solicitudes y respuestas
Reglas de negocio y restricciones
Solicitudes y respuestas con AJAX
Restricciones de seguridad
Logs
Mensajera y Notificaciones
Pruebas de integracin de las vistas y de
los formularios
Interfaces grficas de usuario para las
entradas de datos y mostrar resultados
Diseo responsivo multidispositivo
Utilitarios diversos
Solicitudes y respuestas asncronas
Solicitudes y respuestas con AJAX
Generacin de objetos HTML en tiempo
de ejecucin
Hojas de estilos personalizados
Pruebas funcionales en la Web
2. Historial de revisiones
Versin
1.0
Trmino
Ejemplo
Proyecto
Paquetes
Base de datos
Tablas
Atributo PK
Atributo
Atributo FK
Paquetes
Clases
Variables
Contantes
Mtodo
<nombre_proyecto>
<nombre_carpeta>
<nombre_db>
<prefix_nombre_tabla>
id
<nombre_atributo>
<tabla>_id
<nombre_carpeta>
<NombreClase><NombreCapa/vacio>
<nombre_variable>
<NOMBRE_CONSTANTE>
<nombre_metodo>(var_nombre)
Enumerators
<NOMBRE_ENUM>
Archivos
Interfaces
<nombre_pagina>.<py/html>
I<NombreClase><NombreCapa/vacio>
112
agil_cont
catalogo_productos
agil_cont_db
common_natural_person
id
functional_code
natural_person_id
catalogo_productos
class NaturalPerson
functional_code
DEFAULT="DNI"
def add();
def edit();
def delete();
def get_by_id(id);
def get_list_by_filter(filter);
DEFAULT="DNI"
CE="CE"
OTHERS="OTHERS"
IDENTITY_ CHOICES = (
(DEFAULT, "D.N.I."),
(CE, "C.E."),
(OTHERS, "Otro.")
)
natural_person.html
INaturalPersonService
113
Proyecto: Backengo
Mdulo: Backend, app: accounts
Fecha:14/08/2013
Requisito 2: Ingreso al sistema
ui 2-login.html
114
Proyecto: Backengo
Mdulo: Backend, app: accounts
Fecha:14/08/2013
Requisito 3: Apertura de Cuentas del sistema
ui 3-signup.html
115
Proyecto: Backengo
Mdulo: Backend, app: accounts
Fecha:14/08/2013
Requisito 4: Restablecer contrasea
ui 4-passw ord_reset.html
ui 5-passw ord_reset-done.html
116
ui 6-reset
ui 7-reset-done
117
Proyecto: Backengo
Mdulo: Backend, app: accounts
Fecha:14/08/2013
Requisito 5: Elegir sede y mdulo
ui 8-choice_headquar.html
ui 11-dashboard.html
118
Proyecto: Backengo
Mdulo: Backend, app: accounts
Fecha:14/08/2013
Requisito 6: Agregar nueva empresa y nueva asociacin al usuario actual
ui 9-add_enterprise.html
Funcionalidad:
Aprobado por:
119
Proyecto: Backengo
Mdulo: Backend, app: accounts
Fecha:14/08/2013
Requisito 7: Editar perfil del usuario
ui 10-profile_edit.html
Funcionalidad:
Aprobado por:
120
Proyecto: Backengo
Mdulo: Backend, app: space
Fecha:14/08/2013
Requisito 8: Editar datos de la asociacin
ui 12-edit_current.html
Funcionalidad:
Aprobado por:
121
Proyecto: Backengo
Mdulo: Backend, app: space
Fecha:14/08/2013
Requisito 9: Gestin de empresas
ui 13.1-index.html
ui 13.2-add.html
122
ui 14-edit_current.html
Funcionalidad:
Aprobado por:
123
Proyecto: Backengo
Mdulo: Backend, app: space
Fecha:14/08/2013
Requisito 10: Gestin de sedes
ui 15.1-index.html
ui 15.2-add.html
Funcionalidad:
Aprobado por:
124
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 11: Gestin de usuarios
ui index.html
125
ui add.html
ui person_search.html
126
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 12: Gestin de recursos del sistema
ui index.html
ui add.html
Funcionalidad:
Aprobado por:
127
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 13: Gestin de perfiles de usuario
ui index.html
ui add.html
Funcionalidad:
Aprobado por:
128
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 14: Configuracin de privilegios de perfiles de usuario
ui permissions_edit.html
Funcionalidad:
Aprobado por:
129
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 15: Gestin de mdulos del sistema
ui index.html
ui add.html
Funcionalidad:
Aprobado por:
130
Proyecto: Backengo
Mdulo: Backend, app: space
Fecha:14/08/2013
Requisito 16: Gestin de soluciones o servicios SaaS
ui 21.1-index.html
ui 21.2-add.html
Funcionalidad:
Aprobado por:
131
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 17: Configuracin de planes del sistema
ui plans_edit
Funcionalidad:
Aprobado por:
132
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 18: Gestin de mens dinmicos del sistema
ui index.html
ui add.html
Funcionalidad:
Aprobado por:
133
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 19: Configuracin del sistema
ui basic.html
Funcionalidad:
Aprobado por:
134
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 20: Gestin de copias de seguridad de base de datos
ui index.html
Funcionalidad:
Aprobado por:
135
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 21: Seguimiento de accesos al sistema
ui index.html
Funcionalidad:
Aprobado por:
136
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 22: Seguimiento de auditoria
ui index.html
ui list.html
Funcionalidad:
Aprobado por:
137
Proyecto: Backengo
Mdulo: Backend, app: sad
Fecha:14/08/2013
Requisito 23: Seguimiento de log del sistema
ui index.html
ui list.html
Funcionalidad:
Aprobado por:
138
Proyecto: Backengo
Mdulo: Backend, app: params
Fecha:14/08/2013
Requisito 24: Gestin de localidades
ui index.html (report_pre)
ui add.html
ui report.html
Funcionalidad:
Aprobado por:
139
140
--- ---params
--- --- ---Diagrama de entidades
class params
Nombre:
Paquete:
Versin:
Autor:
params
params
1.0
Asullom
backenddj
enumeration
IDENTITY_TYPES
DEFAULT = DNI
CE = Carnet de extra...
PART_NAC = Partida de naci...
OTHERS = Otros
Locality
LocalityType
-
name: Char
+identity_type
+locality_type
0..1
0..* -
Person
-
birth_date: Date
first_name: Char
identity_num: Char
last_name: Char
modified_in: DateTime
photo: Image
registered_at: DateTime
--- ---sad
141
is_active: Boolean
location: Text
modified_in: DateTime
msnm: Float
name: Char
registered_at: DateTime
utm: Char
sad
sad
1.0
Asullom
django.contrib
dj ango::ContentType
Equivale a Perfil
Group-Permissions
los permisos (recursos+acciones)
definidos para el grupo=RecursoPerfil
+group_set
auth::Group
0..*
-
name: string
app_label: string
model: string
name: string
+content_type
+groups
0..*
+groups
0..*
+group 0..*
user-groups
los permisos del usuario
referente a los recursos(perm)
del sistema a travs de Group.
Filtar los permisos de los
UserProfile*.
+initial_groups
+permission_set
+permissions
0..*
0..*
auth::Permission
User-User_Permissions
nunca usar esta relacion, todo
se manejar a travs de grupos
+user_set
0..*
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
+user
+user_permissions
0..* -
codename: string
name: string
+permission
+user_set
0..*
+user
1
+user
1
1
+user
0..*
registered_at: DateTime
group: Group
registered_at: DateTime
+initial_groups_module_set
+module_set 0..*
0..*
Module
-
description: Text
icon: Char
is_active: Boolean
name: Char
address: Text
is_active: Boolean
is_main: Boolean
modified_in: DateTime
name: Char
phone: Char
registered_at: DateTime
+person
Anlogo a
UserProfileHeadquart
pero para Asociacin
0..1
1
+solutions
space::Solution
description: Text
is_active: Boolean
name: Char
0..* 0..1
0..1
space::Enterprise
space::Association
-
is_active: Boolean
logo: Image
modified_in: DateTime
name: Char
registered_at: DateTime
tax_id: Char
is_active: Boolean
logo: Image
modified_in: DateTime
name: Char
registered_at: DateTime
0..*
enumeration
MODULES
Menu
0..*
description: Text
icon: Char
+parent
is_active: Boolean
0..1
pos: Integer
title: Char
url: Char
0..*
--- ---space
--- --- ---Diagrama de entidades
142
params::Person
0..*
0..1
0..*
0..*
last_headquar_id: Char
last_module_id: Char
0..*
+module_set
0..*
group: Group
registered_at: DateTime
0..*
Anlogo a
UserProfileHeadqu
art pero para
Empresas
space::Headquar(sede)
-
0..*
1
Profile
UserProfileAssociation
UserProfileEnterprise
UserProfileHeadquar
Se le da al usuario acceso a una sede tantos
perfiles(group) sea necesario: el grupo que
es asignado, automticamente debe asignar
en user-groups
0..1
0..*
0..*
0..*
birth_date: Date
first_name: Char
identity_num: Char
last_name: Char
modified_in: DateTime
photo: Image
registered_at: DateTime
class space
Nombre:
Paquete:
Versin:
Autor:
space
space
1.0
Asullom
backenddj
Enterprise
enumeration
TYPES
+type_e
0..* -
GOVERMENT = Gobierno
PRIVATE = Privada
MIXED = Mixta
OTHERS = Otros
Solution
+type_a
1
-
description: Text
is_active: Boolean
name: Char
is_active: Boolean
logo: Image
modified_in: DateTime
name: Char
registered_at: DateTime
tax_id: Char
0..1
1
Example:
UPeU, UNI, UNMSM, etc.
0..1
params::Locality
0..*
0..*
0..*
Headquar(sede)
Association
-
is_active: Boolean
logo: Image
modified_in: DateTime
name: Char
registered_at: DateTime
0..1
0..* -
address: Text
is_active: Boolean
is_main: Boolean
modified_in: DateTime
name: Char
phone: Char
registered_at: DateTime
is_active: Boolean
location: Text
modified_in: DateTime
msnm: Float
name: Char
registered_at: DateTime
utm: Char
Example:
UPeU Lima, UPeU Juliaca, UPeU Tarapoto, etc.
Permite que el empresario pueda manejar varias sedes y pertenecer a una o ms asociaciones
IMPORTANTE: Una empresa existe si tiene una o ms sedes, todo se trabaja en funcin a la sede (Headquart)
143
params/models.py
params/models.py
1.0
Asullom
backenddj
Model
LocalityType
+
__unicode__( ) : self.name
+locality_type
0..1
+locality_set 0..*
Model
models.py
Locality
+
__unicode__( ) : self.name,self.location
Person
+
__unicode__( ) : self.first_name
--- --- --- --- ---Ejemplo completo del diagrama (explica las relaciones a detalle)
144
class params.models
params/models.py::LocalityType
+
__unicode__(self : ) : self.name
+locality_type
0..1
dj ango.db.models::Model
+
+
+
+
+
+locality_set 0..*
delete() : Entity
mucho_ms() : void
objects.filter(condition1 : , conditionN : ) : objects<Entity>
objects.get(id :int) : Entity
save() : Entity
models.py
params/models.py::Locality
+
__unicode__(self : ) : self.name,self.location
sad/models.py
sad/models.py
1.0
Asullom
backenddj
params/models.py::Person
space/models.py::Headquar(sede)
+
__unicode__( ) : self.first_name
+
__unicode__( ) : self.name
+headquar_set
+person
1
+headquart
+headquar_set
1
0..*
0..*
+profile 0..1
+association
Profile
+profile +
+user
dj ango.contrib.auth.models::User
+
__unicode__( ) : self.username
+user_set
__unicode__( ) : self.user.username
0..*
0..1
+user
1
+userprofileheadquart_set
0..1 space/models.py::Association
+userprofileheadquart_set
+enterprise
UserProfileHeadquar
space/models.py::Enterprise
0..*
__unicode__( ) : self.name
+association_set
0..*
__unicode__( ) : self.name
0..*
+userprofileheadquart_set
0..*
+enterprise_set
0..*
UserProfileEnterprise
+userprofileenterprise_set
+groups
0..*
0..*
+group
dj ango.contrib.auth.models::Group
1
+
__unicode__( ) : self.last_name
UserProfileAssociation
+group
+userprofileassociation_set
1
+groups
1
+solution
0..*
+group
+solution
0..1
+group_set
0..*
+initial_groups
0..*
__unicode__( ) : self.name
+solutions
0..*
+permissions
+module_set
dj ango.contrib.auth.models::
Permission
+
+module_set 0..*
+permission
+content_type
0..* +
__unicode__( ) : self.name
0..*
+menu_set
Menu
0..*
dj ango.contrib.auth.models::
ContentType
+
0..*
Module
+initial_groups_module_set
+permission_set
0..1
space/models.py::Solution
0..*
__unicode__( ) : self.title
+parent 0..1
__unicode__( ) : self.last_name
+menu_set 0..*
145
0..*
class space/models.py
Nombre:
Paquete:
Versin:
Autor:
space/models.py
space/models.py
1.0
Asullom
backenddj
Solution
+
+solution
__unicode__( ) : self.name
0..1
+solution
0..1
+association_set 0..*
Association
+
+enterprise_set 0..*
__unicode__( ) : self.name
+association
Enterprise
+
0..1
+enterprise
__unicode__( ) : self.name
__unicode__( ) : self.name
+headquart_set
0..*
+locality
Model
0..1
models.py
params/models.py::Locality
+
__unicode__( ) : self.name,self.location
accounts/views.py
accounts/views.py
1.0
Asullom
+
+
+
+
+
#login
Metodo
Notas
Parmetro
s
add_enterprise() Enterprise in
render_to_response("accounts/add_enterprise.ht
ml", c), Redirect.to(request,
"/accounts/choice_headquar/")
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
rq [in]
request
Public
-Si method="POST":
146
signup_sys() Person in
render_to_response("accounts/signup.html", c),
redirect("/accounts/login/")
Public
147
rq [in]
request
UserProfileEnterprise
17 Salvar los Group de la asociacin (de
acuerdo a la Solution elegida) en
UserProfileAssociation
18 Salvar los Group de la sede, empresa y
asociacin, 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
Parmetr
os
rq [in]
request
rq [in]
request
Public
load_access()
HttpResponseRedirect("/accounts/choice_headq
uar/") |
Redirect.to("/mod_<name>/dashboard/")
Public
str [in]
field
str [in]
value
str [in]
headquar_
id
str [in]
module_id
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 mdulo 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 mdulo seleccionado
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 mdulo anterior (de
Profile), sino cargar
HttpResponseRedirect("/accounts/choice_headqua
r/")
-Si method="POST":
1 Recuperar el d.username si el usuario est
logendose mediante email.
148
rq [in]
request
rq [in]
request
rq [in]
request
Public
user_profile_edit() User in
render_to_response("accounts/profile_edit.html
", c), to("/accounts/choice_headquar/")
Public
-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 travs de User.profile,
sino Salvar un Person nuevo
4. Obtener Profile a travs 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
149
mod_backend/views.py
mod_backend/views.py
1.0
Asullom
#mod_backend_dashboard
+
mod_backend_dashboard(request) : render_to_response("mod_backend/dashboard.html", c)
Metodo
Notas
mod_backend_dashboard()
render_to_response("mod_backend/dashboard.html",
c)
Parmetros
rq [in]
request
Public
Metodo
Notas
Parmetros
locality_add() Locality in
render_to_response("params/locality/add.html",
c), to_action("index")
1 Inicializar Locality
2 Obtener el listado de todos los
LocalityType ordenado por name para
mostrar en el template add.html
rq [in] request
Public
-Si method="POST":
1 Si existe otro Locality con el mismo
150
rq [in] request
1 Si no es vlido 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
Cdigo 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()
locality_edit() Locality in
render_to_response("params/locality/edit.html",
c), to_action("index")
Public
rq [in] request
1 Si no es vlido 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
Cdigo 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" %
151
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
rq [in] request
1 Obtener el listado paginado de Locality
filtrado y ordenado segn los parmetros
enviados y mostrar en el template
index.html
Cdigo 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,
}
locality_report() objects< Locality> in
render_to_response("params/locality/report.html",
c)
1 Obtener el listado de Locality filtrado
y ordenado segn los parmetros enviados y
mostrar en el template report.html
Public
Cdigo 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,
}
locality_state() to_action("index")
Public
rq [in] request
rq [in] request
Cdigo 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()
152
--- --- --- --- ---Ejemplo completo del diagrama (explica las relaciones a detalle)
class params.v iew s
Nombre:
Paquete:
Versin:
Autor:
params.views
locality (ejemplo completo)
1.0
Asullom
python::Template
dj ango.http::
HttpResponseRedirect
+
-
python::Context
-
render(context) : String
python::RequestContext
data: Dictionary
request: HttpRequest
url: String
dj ango.http::
HttpResponse
-
Model
package
dj ango.shortcuts::Package
contents: String
status_code
template: List
+
+
models.py
params/models.py::Locality
redirect(forward) : void
render_to_response(template, data, context) : void
__unicode__(self) : self.name,self.location
+locality_set
0..*
+locality_type
0..1
apps.utils.security.py::Redirect
+
+
Model
dj ango.db::transaction.py
+
python::Exception
params/models.py::LocalityType
+
commit_on_success() : decorator(view_func)
__unicode__(self) : self.name
dj ango.core.paginator::Paginator
params/v iew s.py::#locality
+
+
+
+
+
+
+
+
page(current_page) : page
Paginator(list, per_page) : Paginator
dj ango.contrib::
messages.py
apps.utils.messages.py::Message
apps.utils::decorators.py
+
+
-
apps.utils.security.py::Security
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
+
templatetags::notify.py
153
get_notify(request) : message[]
+
+
+
+
+
python::logging
#user
+
+
+
+
+
+
+
+
+
#menu
+
+
+
+
+
#module
+
+
+
+
+
+
#group
+
+
+
+
+
#resource (Permission)
+
+
+
+
#group
Metodo
group_add() Group in
render_to_response("sad/group/add.html", c),
to_action("index")
Public
Notas
Parmetro
s
rq [in]
request
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
group_delete() to_action("index")
Public
rq [in]
request
1 Si no es vlido 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
154
group_edit() Group in
render_to_response("sad/group/edit.html", c),
to_action("index")
rq [in]
request
1 Si no es vlido 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
Public
-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
group_index() objects< Group> in
render_to_response("sad/group/index.html", c)
rq [in]
request
1 Obtener el listado de Group ordenado por
"-id" y mostrar en el template index.html
Public
#menu
Metodo
menu_add() Menu in
render_to_response("sad/menu/add.html",
c), to_action("index")
Public
Notas
Parmetros
rq [in] request
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
155
rq [in]
request
menu_delete() to_action("index")
Public
menu_edit() Menu in
render_to_response("sad/menu/edit.html",
c), to_action("index")
Public
rq [in] request
1 Si no es vlido 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
1 Si no es vlido 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
menu_index() page< Menu> in
render_to_response("sad/menu/index.html",
c)
1 Obtener el listado paginado
de Menu filtrado y ordenado
segn los parmetros enviados y
Public
mostrar en el template
index.html
rq [in] request
menu_state() to_action("index")
Public
rq [in] request
1 Si no es vlido 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
156
#module
Metodo
Notas
Parmetr
os
module_add() Module in
render_to_response("sad/module/add.html",
c), to_action("index")
1 Inicializar Module
2 Obtener el listado de Group ordenado por
"name" y mostrarlos en el template add.html
Public
rq [in]
request
-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")
module_delete() to_action("index")
Public
module_edit() Module in
render_to_response("sad/module/edit.html"
, c), to_action("index")
Public
rq [in]
request
1 Si no es vlido 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
str [in]
key
rq [in]
request
1 Si no es vlido 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
6Obtener 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
157
str [in]
key
rq [in]
request
1 Obtener el listado de Module ordenado por
"module", "-id" y mostrar en el template
index.html
rq [in]
request
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
module_state() to_action("index")
Public
rq [in]
request
1 Si no es vlido 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
str [in]
state
str [in]
key
#resource (Permission)
Metodo
resource_add() Permission in
render_to_response("sad/resource/add.html",
c), to_action("index")
Public
Notas
Parmetro
s
rq [in]
request
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
resource_delete() to_action("index")
Public
rq [in]
request
1 Si no es vlido la llave de seguridad,
retornar exception informando que se ha
denegado el acceso debido a que la llave es
158
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
resource_edit() Permission in
render_to_response("sad/resource/edit.html",
c), to_action("index")
Public
rq [in]
request
1 Si no es vlido 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
1 Obtener el listado de Permission ordenado
por
"content_type__app_label","content_type__model
" y mostrar en el template index.html.
#user
Metodo
user_add() User in
render_to_response("sad/user/add.html", c),
to_action("index")
Public
Notas
Parmetro
s
rq [in]
request
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
159
user_add_from_person() User in
render_to_response("sad/user/add_from_person.ht
ml", c), to_action("index")
Public
rq [in]
request
1 Si no es vlido 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 asociacin
(request.POST.getlist("groups_association"))
en UserProfileAssociation
11 Salvar los Group de la sede, empresa
yasociacin, 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
160
user_delete() to_action("index")
Public
user_edit() User in
render_to_response("sad/user/edit.html", c),
to_action("index")
Public
rq [in]
request
1 Si no es vlido 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
1 Si no es vlido 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 travs de User.profile,
sino Salvar un Person nuevo
5. Obtener Profile a travs 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 asociacin
asignados al User de UserProfileAssociation
161
rq [in]
request
1 Obtener el listado paginado de User
filtrado y ordenado segn los parmetros
enviados y mostrar en el template index.html
str [in]
field
str [in]
value
str [in]
order
user_person_search() objects<Person> in
render_to_response("sad/user/person_search.html"
, c)
1 Obtener el listado de Person que no estn
en Profile, filtrar segn los parmetros
enviados de la bsqueda, ordenar por
Public
"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
rq [in]
request
1 Si no es vlido 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
162
str [in]
state
user_view() User in
render_to_response("sad/user/view.html", c),
to_action("index")
Public
rq [in]
request
1 Ejecute este mtodo con ajax
2 Suba el archivo usando Upload.save_file(
, )
3 Devuelva informacin de la imagen subida
rq [in]
request
1 Si no es vlido 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
163
space/views.py
space/views.py
1.0
Asullom
#headquar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#enterprise
#association
#solution
#association
Metodo
association_edit_current() Association in
render_to_response("space/association/edit_curre
nt.html", c)
Public
Notas
Parmetr
os
rq [in]
request
rq [in]
request
1 Ejecute este mtodo con ajax
2 Suba el archivo usando Upload.save_file( ,
)
3 Devuelva informacin de la imagen subida
#enterprise
164
Metodo
enterprise_add() Enterprise in
render_to_response("space/enterprise/add.html",
c), to_action("index")
Public
Notas
Parmetr
os
rq [in]
request
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
enterprise_delete() to_action("index")
Public
enterprise_edit() Enterprise in
render_to_response("space/enterprise/edit.html",
c), to_action("index")
Public
rq [in]
request
1 Si no es vlido 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
str [in]
key
rq [in]
request
1 Si no es vlido 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
str [in]
key
-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
enterprise_edit_current() Enterprise in
render_to_response("space/enterprise/edit_curren
t.html", c)
Public
rq [in]
request
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
165
rq [in]
request
enterprise_state() to_action("index")
rq [in]
request
Public
str [in]
state
str [in]
key
rq [in]
request
1 Ejecute este mtodo con ajax
2 Suba el archivo usando Upload.save_file( ,
)
3 Devuelva informacin de la imagen subida
#headquar
Metodo
headquar_add() Headquar in
render_to_response("space/headquar/add.html", c),
to_action("index")
Public
Notas
Parmetr
os
rq [in]
request
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
headquar_change_association() Headquar in
render_to_response("space/headquar/change_associat
ion.html", c), to_action("index")
Public
166
rq [in]
request
str [in]
key
-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
headquar_edit() Headquar in
render_to_response("space/headquar/edit.html", c),
to_action("index")
Public
rq [in]
request
rq [in]
request
str [in]
key
str [in]
key
-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
headquar_index() objects< Headquar> in
render_to_response("space/headquar/index.html", c)
Public
headquar_state() to_action("index")
Public
rq [in]
request
rq [in]
request
str [in]
state
str [in]
key
#solution
Metodo
Notas
Parmetros
solution_add() Solution in
render_to_response("space/solution/add.html", c),
to_action("index")
1 Inicializar Solution
rq [in]
request
Public
-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
167
solution_delete() to_action("index")
Public
solution_edit() Solution in
render_to_response("space/solution/edit.html", c),
to_action("index")
Public
1 Si no es vlido 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
1 Si no es vlido 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
rq [in]
request
-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
solution_index() objects< Solution> in
render_to_response("space/solution/index.html", c)
rq [in]
request
1 Si no es vlido 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
Public
solution_state() to_action("index")
Public
168
169
Ticket
Estado Estima
Entrega
(h*)
1
01/08/2013
Hecho
48
06-ago
Hecho
48
11-ago
Hecho
24
14-ago
Hecho
18
16-ago
Hecho
24
19-ago
Hecho
21-ago
Usuario en la nube
6
Hecho
22-ago
Hecho
18
25-ago
Hecho
26-ago
Hecho
12
28-ago
sistema
10
11
12
Hecho
12
30-ago
13
Hecho
02-sep
14
Hecho
18
08-sep
y asignacin de planes
15
Hecho
12
12-sep
16
Hecho
12
16-sep
17
Hecho
12
20-sep
y asignacin de planes
18
Hecho
12
24-sep
19
Hecho
12
28-sep
20
Hecho
12
02-oct
170
21
Gestin de sedes
Hecho
18
07-oct
22
Gestin de usuarios
Hecho
18
13-oct
23
Men dinmico
Hecho
12
17-oct
24
Depuracin
Hecho
18
23-oct
25
Hecho
26-oct
26
Entrenamiento de integracin
Hecho
12
30-oct
27
Hecho
48
15-nov
28
15/11/2013
Sumas:
451
171
RF01
/1
Requisito
Requisito 1: Identificacin y registro de alpacas
Descripcin:
Registro de alpacas segn su procedencia, cdigo de
identificacin, sexo, color, tipo o raza, datos de
nacimiento, padres, localidad donde vive, asociacin,
rebao y grupo a la que pertenece.
RF02
/1
RF03
/1
RF04
/2
Estado
Estimac.
(horas)
Prioridad
Nuevo
40
10
Nuevo
40
Nuevo
20
Nuevo
Nuevo
20
Nuevo
10
Nuevo
10
173
Riesgo de seguridad
El sistema permite visualizar y actualizar informacin
de alpacas de otros rebaos. Un usuario debe tener
acceso nicamente a los registros de los Grupos
previamente asignados.
A: Amenza V: Vulnerabilidad
Probabilidad: Alta, Media, Baja
Impacto: Alta, Media, Baja
174
Tipo Probab
(A/V) ilidad
V
Alto
Impac
to
Alto
Priori
dad
1000
Componente de seguridad
Riesgos de seguridad
RS-Q01.
UserToken.
Contiene informacin de accesos a los Gupos de un determinado
rebao, bajo ciertos perfiles de usuario. Con lo cual permite el
control del acceso a datos de alpacas de cierto Grupo.
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:
Asignacin 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)
Validacin::
if camelido.id in UserToken.get_grupo_id_list(request.session):
#OK
else:
raise Exception( "Falta de privilegios ")
175
2. Historial de revisiones
Versin
1.0
Tecnologa
Django Model
Django Test/Unit Test
Django View
Django Business
SAD Backend
Django Test
Template: T
Django Template
Bootstrap
JQUERY
AJAX+ JSON
SAD Frontend
Selenium
176
Funcin
Entidades y mapeamientos
Pruebas unitarias del modelo
Controlador de solicitudes y respuestas
Reglas de negocio y restricciones
Solicitudes y respuestas con AJAX
Restricciones de seguridad
Logs
Mensajera y Notificaciones
Pruebas de integracin de las vistas y de
los formularios
Interfaces grficas de usuario para las
entradas de datos y mostrar resultados
Diseo responsivo multidispositivo
Utilitarios diversos
Solicitudes y respuestas asncronas
Solicitudes y respuestas con AJAX
Generacin de objetos HTML en tiempo
de ejecucin
Hojas de estilos personalizados
Pruebas funcionales en la Web
2. Historial de revisiones
Versin
1.0
Trmino
Ejemplo
Proyecto
Paquetes
Base de datos
Tablas
Atributo PK
Atributo
Atributo FK
Paquetes
Clases
Variables
Contantes
Mtodo
<nombre_proyecto>
<nombre_carpeta>
<nombre_db>
<prefix_nombre_tabla>
id
<nombre_atributo>
<tabla>_id
<nombre_carpeta>
<NombreClase><NombreCapa/vacio>
<nombre_variable>
<NOMBRE_CONSTANTE>
<nombre_metodo>(var_nombre)
Enumerators
<NOMBRE_ENUM>
Archivos
Interfaces
<nombre_pagina>.<py/html>
I<NombreClase><NombreCapa/vacio>
177
agil_cont
catalogo_productos
agil_cont_db
common_natural_person
id
functional_code
natural_person_id
catalogo_productos
class NaturalPerson
functional_code
DEFAULT="DNI"
def add();
def edit();
def delete();
def get_by_id(id);
def get_list_by_filter(filter);
DEFAULT="DNI"
CE="CE"
OTHERS="OTHERS"
IDENTITY_TYPES = (
(DEFAULT, "D.N.I."),
(CE, "C.E."),
(OTHERS, "Otro.")
)
natural_person.html
INaturalPersonService
2. Historial de revisiones
Versin
1.0
3. Equipo de trabajo
Rol
Product
Owner
Scrum
Master
Dupla 1Doc./Dev.
Nombre
Dra. Nelida Gladys
Maquera Sosa
Ing. Fredy Abel
Huanca Torres
Ing. Fredy Abel
Huanca Torres
Ciudad
Juliaca
gladys.maqueragma@gmail.com
Correo/Celular
Tiempo
50%
Puno
abel.huanca@upeu.pe
30%
Puno
abel.huanca@upeu.pe
20%
Chullunquiani
asullom@gmail.com
50%
Dupla 2Dev.
Juliaca
oscdmdz@gmail.com
100%
Juliaca
fasco.elvis.45@gmail.com
50%
4. Herramientas
Elemento
Portal de
gerenciamiento
Portal de integracin
Modelo y Prototipado
Lenguaje de
programacin
Frameworks
Framework responsivo
Base de datos
IDE
Comunicaciones
Herramienta
Assembla.com
Hosting
Github.com
Enterprise
Architect 7.5
Balsamiq
Python
https://github.com/abelthf/qualpaca-project
Django 1.6.8
Bootstrap 2
MySQL 5.x
Sublime Text 2
Facebook
https://www.assembla.com/spaces/concytec-qualpaca
http://grupoinnop.pe/design
https://www.facebook.com/groups/513850221984640
178
5. Retos a superar
Desafo
Respecto a la metodologa scrum
Solucin
Definir la duracin del sprint a 4 semanas
Lea la wiki y utilice el foro de discusin del portal de
gerenciamiento (Mensajes)
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)
Documentacin en ingls
Respecto a la documentacin
Falta de compromiso del cliente
179
180
ui add.html
181
3
4
INFORMACIN GENERAL
Cdigo y Nombre del proyecto: QUALPACA
Desarrollo de Plataforma Tecnolgica en la Web para la Competitividad de la Cadena
Productiva de Alpacas en la Regin Puno
HISTORIAL DE REVISIONES
Versin - Fecha
1.0 __04__/__11__/__2013__
ACTUALIZACIONES IMPORTANTES
Diseo integrado con los componentes de Backengo versin 1.0
LINKS DE DESCARGA O DE CONSULTA
Modelo [http://grupoinnop.pe/design] (Este hosting requiere contrasea)
Scripts:
No es necesario, Django genera automticamente las tablas.
ESTRUCTURA DEL MODELO
pkg Qualpaca Modules
Mdulo
---Modelo del dominio
--- ---app registro
182
space::Headquar(sede)
-
address: Text
is_active: Boolean
is_main: Boolean
modified_in: DateTime
name: Char
phone: Char
registered_at: DateTime
+sede
Camelido
+sede
1
1
0..*
space::Grupo
-
majada: Boolean
nombre: Char
+grupo
0..1
0..*
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
---Modelo de clases
--- ---Capa(si es Models o Views(Views en MVC es Controllers))
--- --- ---registro app
--- --- --- ---Diagrama de clases de diseo Business Layer
class registro.business
business.py
CamelidoBusiness
+
+
+
+
+
+
+
+
+
+
+
camelido
+
+
+
+
+
+
+
+
+
183
Seleccin e Identificacin
(registro)
Inicio
Castracin (componente
opcional)
fin
Actividades simultneas
Faeneo,Venta, Descarte,...
(retiro)
[Ms de 4 servicios]
Sanidad
Esquila
Empadre y
Gestacin(empadre)
[Hasta 4 servicios]
fin
Qued
preada?
[si]
Paricin(paricion)
Destete
184
[no]
Notas
Parmetros
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 algn estado de retiro
(venta, muerte, etc.)
int [in] id
get_list_by_sexo_and_filter()
objects<Camelido>
Public
order by codigo_arete
Traer los que tienen como ltimo
estado=seleccionado
order by codigo_arete
Traer los que tienen como ltimo
estado=seleccionado
get_retiro_list_by_headquart_a
nd_fechas_and_grupo()
objects<Camelido>
Public
initialize() Camelido()
Public
remove() 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 algn estado de retiro
(venta, muerte, etc.)
int [in] id
save() Camelido
Public
185
Parmetros
HttpRequest [in] request
camelido_ficha()
render_to_response
Public
camelido_json_by_filter()
render_to_response
Public
camelido_report()
render_to_response
Public
llama a get_list_by_headquart_and_fechas_and_grupo
camelido_report_retiro()
render_to_response
Public
llama a get_list_by_headquart_and_fechas_and_grupo
llama a remove
camelido_retiro()
camelido_remove|HttpResponseR
edirect
Public
hembra_json_by_filter()
render_to_response
Public
macho_json_by_filter()
render_to_response
Public
Integer [in] id
186
187
INFORMACIN GENERAL
Cdigo y Nombre del proyecto: QUALPACA - Desarrollo de Plataforma
Tecnolgica en la Web para la Competitividad de la Cadena Productiva de
Alpacas en la Regin Puno
Organizacin: 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
Dueo del producto: Gladys Maquera
Patrocinador del proyecto: CONCYTEC a travs de Gladys Maquera
Gerente del proyecto (Master): Abel Huanca
HISTORIAL DE REVISIONES
Versin - Fecha - Elaborado por
1.0 - 21/06/2013 - Abel Huanca
REFERENCIAS
Product backlog o Requisitos del Sistema
189
Sprint 1
Estado
Tarea:
Desarrollar el MODELO de datos para el mdulo de
PRODUCCIN y generar la administracin automtica
Django.
Descripcin:
Actualizar las apps:
apps/params
apps/rrhh
apps/sad
apps/space
190
Hecho
Trabajo
restante
4 horas
Responsa
ble
ngel
Sullon
T02
Tarea:
Desarrollar la pgina index del mdulo de produccin
para listar y buscar alpacas.
Hecho
4horas
Oscar
Mendoza
Hecho
8horas
Elvis Ali
Hecho
16horas
Oscar
Mendoza
Descripcin:
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
Bsqueda asncrona (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 vaco)
apps/registro/views.registro_index
Pruebas de aceptacin y de seguridad:
1. Visualizar o buscar alpacas del rebao y al encontrar
mostrar detalles del registro en otra ventana.
2. Al actualizar con mtodo GET en caso de errores,
debe mantenerse en el mdulo de PRODUCCION.
T03
Tarea:
Refinar el listado y bsqueda de alpacas
Descripcin:
Estos resultados deben mostrar alpacas con el ltimo
estado del camlido y segn privilegios del usuario.
Listado de alpacas en :
apps/mod_produccion/views.camelido_list
Bsqueda asncrona (AJAX) de alpacas en:
apps/mod_produccion/views.camelido_json_by_filter
T04
191
apps/registro/views.camelido_upload
Redirigir a:
templates/registro/registro/edit.html (cargar datos)
apps/registro/views.registro_edit
y desarrollar el mtodo editar.
T05
192
INFORMACIN GENERAL
Cdigo y Nombre del proyecto: QUALPACA - Desarrollo de Plataforma
Tecnolgica en la Web para la Competitividad de la Cadena Productiva de
Alpacas en la Regin Puno
Organizacin: 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
Dueo del producto: Dra. Gladys Maquera
Patrocinador del proyecto: CONCYTEC a travs de Gladys Maquera
Gerente del proyecto (Master): Ing. Abel Huanca
FECHA DE ENTREGA: 04-12-2013
RESULTADO
Conforme: Si
Das atraso: 6 a partir del inicio del desarrollo
OBSERVACIONES
No hubo observaciones relevantes.
193
ltima
revisin
Elaborado
por
Caractersticas
Descarga,
Instalacin y
Ejecucin
Pgina de
Inicio
194
Crear cuenta
de usuario
Formulario
de ingreso
195
Eleccin de la
empresa/sed
e y mdulo
Configuraci
n de los
planes SaaS
Creacin de
recursos
196
Creacin de
mens
Formulario
registro de
nuevas
empresas
Gestin de
empresas
197
Gestin de
sedes
Gestin de
usuarios
198
199