You are on page 1of 32

MVCGI: Modelo de Implementacin Estndar

para arquitecturas MVC modulares en


programas de interfaz CGI

Eugenia Bahit
Diciembre 2016

Resumen
Este documento pretende sentar precedente para discutir las bases de
un mtodo (o modelo) de diseo estndar (al que a los nes prcticos
se menciona en el presente como  MVCGI ) para la implementacin de
arquitecturas MVC modulares en programas CGI. Esta primera versin
se concentra -mayormente- en cuestiones relativas a la seguridad de la
aplicacin y a su arquitectura, siendo todo lo aqu mencionado, vlido para
cualquier lenguaje de programacin interpretado de alto nivel, incluyendo
-pero no limitndose a- Python, PHP, Ruby y Perl, entre otros.

2016 Eugenia Bahit. Laboratorio de Altos Estudios en Ciencias In-

formticas (LAECI). Se otorga permiso para copiar, distribuir y/o modicar este documento bajo los trminos de la Licencia de Documentacin
Libre de GNU, Versin 1.3 o cualquier otra versin posterior publicada
por la Free Software Foundation. Una copia de la licencia est incluida en
la seccin titulada  GNU Free Documentation License .

MVCGI 1.0.5

Diciembre 2016

ndice
I Introduccin

1. Destinatarios

2. Requisitos previos

II Modelo propuesto. Mtodo.

3. Sistema de Archivos

3.1.

Componentes del sistema de archivos . . . . . . . . . . . . .

3.2.

rbol de directorios

. . . . . . . . . . . . . . . . . . . . . .

3.3.

Sistema de permisos

. . . . . . . . . . . . . . . . . . . . . .

4. Conguracin del Host Virtual de Apache

4.1.

Conguracin del VirtualHost . . . . . . . . . . . . . . . . .

4.2.

Consideraciones particulares sobre la interaccin de la


interfaz CGI con otros mdulos . . . . . . . . . . . . . . . .

4.3.

10

4.2.1.

Pruebas realizadas con PHP como CGI simultneamente con el mdulo php5 . . . . . . . . . . . . . . .

10

4.2.2.

Valoracin de resultados . . . . . . . . . . . . . . . .

11

Consideraciones particulares sobre los archivos de conguracin general y distribuido (httpd.conf y .htaccess ) . . . . .

12

5. Poltica de nombres para mdulos, modelos, vistas y


controladores
12
5.1.

Poltica de nombres . . . . . . . . . . . . . . . . . . . . . . .

12

5.2.

Formato de la URI . . . . . . . . . . . . . . . . . . . . . . .

13

6. Archivo de control frontal ejecutable (eXecutable Front


Controller - XFC-)
13
6.1.

Objetivo

6.2.

Responsabilidades

. . . . . . . . . . . . . . . . . . . . . . .

13

6.3.

Caractersticas

. . . . . . . . . . . . . . . . . . . . . . . . .

14

6.4.

Llamada al controlador solicitado . . . . . . . . . . . . . . .

14

6.4.1.

Saneamiento

14

6.4.2.

Validacin de la solicitud

6.5.

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

Manejo de solicitudes errneas


6.5.1.

. . . . . . . . . . . . . . .

14

. . . . . . . . . . . . . . . .

15

Cuestiones de seguridad en la modicacin del


cdigo de estado

13

. . . . . . . . . . . . . . . . . . . .

15

6.6.

Modicacin de los cdigos de respuesta del servidor HTTP

16

6.7.

Cdigo de ejemplo de un XFC en Python

16

2016 Eugenia Bahit

. . . . . . . . . .

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

7. Archivo de inicializacin de variables de entorno de la


aplicacin
17
7.1.

Responsabilidad del archivo de inicializacin de variables . .

17

7.2.

Variables de entorno

17

7.3.

Cuestiones de seguridad relativas a la inicializacin de las

. . . . . . . . . . . . . . . . . . . . . .

variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8. Archivo de conguracin
8.1.

18

19

Variables de conguracin sugeridas

. . . . . . . . . . . . .

20

9. Consideraciones generales sobre los encabezados del


servidor HTTP/1.1
20

9.1.

Aviso legal sobre la seccin

9.2.

Recomendaciones

para

la

. . . . . . . . . . . . . . . . . .
modicacin

de

20

encabezados

segn las RFC

. . . . . . . . . . . . . . . . . . . . . . . . .

21

9.3.

Lnea de inicio

. . . . . . . . . . . . . . . . . . . . . . . . .

22

9.4.

Campos de encabezado . . . . . . . . . . . . . . . . . . . . .

22

9.5.

Fuentes de documentacin originales

22

. . . . . . . . . . . . .

10.Correspondencia

23

III GNU Free Documentation License

23

1. APPLICABILITY AND DEFINITIONS

24

2. VERBATIM COPYING

26

3. COPYING IN QUANTITY

26

4. MODIFICATIONS

27

5. COMBINING DOCUMENTS

29

6. COLLECTIONS OF DOCUMENTS

30

7. AGGREGATION WITH INDEPENDENT WORKS

30

8. TRANSLATION

30

9. TERMINATION

31

10. FUTURE REVISIONS OF THIS LICENSE

31

11. RELICENSING

32

2016 Eugenia Bahit

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

Parte I
Introduccin
1 como una interfaz

CGI (Common Gateway Interfaz) es denido en la RFC3875

sencilla para ejecutar programas bajo servidores HTTP de forma independiente


a

la

plataforma

(Robinson

&

Coard,

2004),

proponiendo

una

forma

de

comunicacin entre la aplicacin y el servidor que facilita la independencia de


ambos.
Por su parte, MVC es un patrn arquitectnico, originalmente denido como un
lenguaje de patrones (Reenskaug, 1979) y posteriormente como paradigma
de programacin (Krasner & Pope, 1988), que propone una independencia
similar entre la abstraccin de los datos de un sistema y las diferentes
representaciones grcas de stos (Reenskaug, 1979).
La independencia que plantea la implementacin simultnea de CGI como
interfaz de comunicacin entre la aplicacin y el servidor, por un lado, y, MVC
como mtodo de comunicacin interno de los componentes abstractos de un
programa y su interfaz grca de usuario (GUI), por el otro, podran suponer
la posibilidad de crear herramientas de bajo coste para el servidor (debido a la
escasez de recursos que requieren ser consumidos) y de gran portabilidad (como
consecuencia directa de la falta de dependencia).
En los aos posteriores a la presentacin de los modelos ut supra mencionados
(e incluso en la actualidad) se han presentado un gran nmero de herramientas
destinadas al desarrollo de sistemas informticos y de a poco, la interfaz CGI
ha ido quedando en desuso y con ella, las investigaciones sobre la seguridad
en programas que implementen dicha interfaz. Por otra parte, el scripting
involucrado en la escritura de programas CGI, no ha sido incluido hasta la
actualidad, como parte de los estudios de investigacin sobre buenas prcticas
de programacin y estructuras de cdigo limpio, siendo ambas problemticas,
seguridad y falta de estudio de las buenas prcticas en el scripting, dos
posibles impedimentos para considerar viable el diseo de programas CGI
que implementen arquitecturas MVC modulares, seguras, portables, livianas
y legibles.
A n de erradicar ambas problemticas y ofrecer entonces, una alternativa
viable, a continuacin, se expone una propuesta de modelizacin para la
implementacin de arquitecturas MVC modulares en programas CGI, abriendo
las bases necesarias para discutir un modelo estandarizado a futuro.

2016 Eugenia Bahit

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

1. Destinatarios
Desarrolladores de frameworks
Ingenieros del ncleo

2. Requisitos previos
Para un entendimiento ecaz del presente documento, se recomienda:

1) Poseer o adquirir un dominio avanzado de conguracin del


servidor HTTP de Apache, sobre sistemas GNU/Linux.
Para tener una aproximacin a este dominio, se recomienda leer la documentacin ocial de Apache sobre Seguridad y generacin de contenido dinmico
con CGI: http://httpd.apache.org/docs/current/.

Un acercamiento rpido y supercial a la conguracin de Apache para la


ejecucin de programas CGI, puede obtenerse con la Gua Dynamic Content
with CGI de Apache: https://httpd.apache.org/docs/current/howto/cgi.html

Para un acercamiento ms exhaustivo se recomienda la lectura de los siguientes


documentos (ver URL de referencias en las notas nales):

Apache Performance Tuning


Security Tips

3
4

Apache Virtual Host Documentation

Apache mod_rewrite

Apache HTTP Server tutorial: .htaccess le

AllowOverride directive

2) Estar familiarizado o familiarizarse con el diseo de arquitecturas


MVC propuesto por Trygve Reenskaug en 1979.
Para una aproximacin a este conocimiento, se recomienda leer la documentacin original de MVC en el Sitio Web del autor, Trygve M. H. Reenskaug:

2016 Eugenia Bahit

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

http://heim.i.uio.no/~trygver/

3) Estar familiarizado o familiarizarse con la lectura y el estudio de


las RFC publicadas por la Internet Engineering Task Force (IETF).
Para tener una aproximacin a las RFC, se recomienda la lectura de las RFC3875
(The Common Gateway Interface [CGI] Version 1.1) y RFC7230-5 (Hypertext
Transfer Protocol [HTTP/1.1]).

4) Poseer o adquirir un dominio intermedio de notacin simblica en


lenguaje formal (lgica simblica o matemtica).
Para tener una aproximacin a la lgica simblica y al lenguaje formal, se
recomienda la lectura de los apuntes de la ctedra de Introduccin a la Lgica y

Mtodos Cientcos, del PEA de LAECI (http://46.101.4.154/PEA/COD3/).

5) Estar familiarizado o familiarizarse con la notacin BNF


(BackusNaur form).
Para tener una aproximacin a la notacin BNF extendida, se recomienda una
lectura rpida y supercial de la ISO/IEC 14977/1996:
https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf

Parte II
Modelo propuesto. Mtodo.

3. Sistema de Archivos
Se destina:

1. un directorio raz como entrada principal al sistema;


2. un directorio de aplicacin, manejado por un archivo de control frontal
ejecutable (executable front controller -XFC-) y,
3. un directorio esttico de libre acceso.

Estos tres directorios representan la base para el sistema de archivos y son


explicados en lo sucesivo.

2016 Eugenia Bahit

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

3.1. Componentes del sistema de archivos


Directorio raz del sistema:

Destinado a nuclear los archivos estticos y de la aplicacin.

Directorio de aplicacin

Destinado

nuclear

los

archivos

fuente

de

la

aplicacin

mantenerlos separados del contenido esttico.

Ncleo del sistema

Directorio destinado a nuclear los archivos centrales de la aplicacin,


comunes a cualquier sistema.

Mdulos del sistema

Directorio destinado al almacenaje de archivos de funcionalidades


especca de la aplicacin.

Archivo de control frontal ejecutable (eXecutable Front Controller - XFC)

Manejador general de solicitudes HTTP de la aplicacin.

Archivo de inicializacin de variables de entorno de la aplicacin

Meta-variables (o variables de entorno) de la aplicacin, necesarias


para su funcionamiento pero no congurables.

Archivo de conguracin

Variables de conguracin especca de la aplicacin.

Directorio esttico

Destinado a nuclear archivos estticos y binarios no ejecutables.

2016 Eugenia Bahit

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

3.2. rbol de directorios


rootsystem/
application /
core /
modules/
config.py|php|rb|pl|sh|<other>
xfc.py|php|rb|pl|sh|<other>
settings.py|php|rb|pl|sh|<other>
static

3.3. Sistema de permisos


Se asignan permisos 755 a directorios y 644 a archivos. Se habilitan permisos de
ejecucin en el controlador frontal (XFC) de la aplicacin.

rootsystem/
[drwxr-xr-x] application /
[drwxr-xr-x] core /
[drwxr-xr-x] modules/
[-rw-r--r--] config.py|php|rb|pl|sh|<other>
[-rwxr-xr-x] xfc.py|php|rb|pl|sh|<other>
[-rw-r--r--] settings.py|php|rb|pl|sh|<other>
[drwxr-xr-x] static /

4. Conguracin del Host Virtual de Apache


4.1. Conguracin del VirtualHost
Todas las variables de conguracin son manejadas a travs de sus correspondientes directivas en un archivo de conracin de host virtual (VirtualHost ) de
Apache. Se evita el empleo de un archivo de conguracin distribuido, .htaccess
(se recomienda la lectura de la seccin 4.3 en la pgina 12 para una explicacin detallada). Se evita la modicacin directa del archivo de conguracin
de Apache (httpd.conf o su equivalente segn distribucin) por los motivos expuestos en la seccin 4.3.

2016 Eugenia Bahit

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

1. Se establece como DocumentRoot el directorio raz del sistema a n de


habilitar una nica va de acceso a la aplicacin.
2. Se prohbe la indexacin de todos los directorios a n de evitar la
exposicin del sistema de archivos de la aplicacin.
3. Se redirigen todas las solicitudes realizadas sobre el directorio raz, al XFC
a n de mantener un control absoluto sobre la totalidad de peticiones
(incluyendo las solicitudes errneas) desde un nico archivo de control
frontal.
4. Se exceptan las peticiones al directorio esttico del control frontal de
solicitudes, a n de que las mismas sean manejadas nicamente por
Apache.
5. Se deshabilita la reescritura de la URL en cada uno de los directorios, a
n de evitar la sobre carga del servidor (ver seccin 4.3 en la pgina 12
para una argumentacin detallada).
6. Se establece un manejador de scripts CGI a nivel del directorio de la
aplicacin. Se evita la habilitacin del mismo a nivel del XFC como medida
de seguridad preventiva y complementaria en el supuesto de que una
vulnerabilidad en el XFC permitiese el acceso a otros scripts del sistema.
En dicho supuesto, la falta de permisos de ejecucin en los scripts causara
un error en Apache, generando un cdigo de respuesta HTTP /1.1 500.
En el supuesto de una vulnerabilidad en el XFC, el establecimiento de un
manejador de scripts CGI solo a nivel del mismo, facilitara la descarga del
cdigo fuente de los scripts no alcanzados por dicho manejador. Frente al
supuesto escenario, se pondera el fallo de Apache por sobre la exposicin
del cdigo fuente.

Se utiliza la siguiente plantilla como base para la creacin del archivo de


conguracin del Host Virtual de Apache correspondiente al dominio de la
aplicacin:

ServerName <host>
DocumentRoot <root_path>
ErrorLog /<path>/<project>/logs/error.log
CustomLog /<path>/<project>/logs/access.log combined
<Directory "<root_path>">

2016 Eugenia Bahit

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

Options -Indexes
AllowOverride None
RewriteEngine On
RewriteRule !(^static) application/xfc.py
</Directory>
<Directory "/<root_path>/application">
Options +ExecCGI -Indexes
SetHandler cgi-script
AllowOverride None
</Directory>
<Directory "/<root_path>/static">
Options -Indexes
AllowOverride None
</Directory>

4.2. Consideraciones particulares sobre la interaccin de


la interfaz CGI con otros mdulos
4.2.1. Pruebas realizadas con PHP como CGI simultneamente con
el mdulo php5
Las

pruebas

realizadas

para

ejecutar

simultneamente con el mdulo

php5

programas

PHP

con

interfaz

CGI

habilitado en Apache 2.2 sobre Debian

7.11, arrojaron los siguientes resultados:

PRUEBA 1.A)

Sin

realizar

modicaciones

sobre

resultaron en una respuesta prematura del mdulo

php5

el

VirtualHost,

sobre la interfaz

CGI (ver Algoritmo 1).

Algoritmo 1 Habilitacin del manejador CGI sin deshabilitar mod_php


<Directory "/<root_path>/application">
Options +ExecCGI -Indexes
SetHandler cgi-script
AllowOverride None
</Directory>

2016 Eugenia Bahit

10

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

PRUEBA 1.B)

La

deshabilitacin

del

mdulo

php5

permiti

al

intrprete responder de forma normal a las solicitudes del programa.

PRUEBA 1.C) La implementacin de las instrucciones RemoveHandler


.php

RemoveLanguage .php

de forma individual y simultnea, en el

directorio raz, en el directorio de la aplicacin y en ambos a la vez, no


modicaron los resultados.

Algoritmo 2 Habilitacin del manejador CGI sin deshabilitar mod_php


<Directory "/<root_path>/application">
Options +ExecCGI -Indexes
<FilesMatch "\.php$">
SetHandler cgi-script
</FilesMatch>
AllowOverride None
</Directory>

PRUEBA 1.D)

La modicacin de la extensin del XFC por una

diferente a .php prioriz la actuacin de la interfaz CGI sobre la del mdulo

php5.

PRUEBA 1.E)

La habilitacin del manejador de la interfaz CGI

mediante la captura de la extensin .php respondi de la misma forma


que la modicacin de la extensin del XFC (ver Algoritmo 2).

Prueba realizada

Respuesta prioritaria

Habilitacin del manejador de scripts CGI


simultneamente con el mdulo php5 habilitado
Deshabilitacin de mod_php
Implementacin de las instrucciones

RemoveHandler .php

RemoveLanguage .php

Modicacin de la extensin del XFC por .foo


Habilitacin del manejador CGI mediante
captura de la extensin de archivo .php

mod_php
manejador CGI
mod_php
manejador CGI
manejador CGI

Cuadro 2: El manejador CGI respondi a la solicitud en 3 casos: al deshabilitar


el mdulo php5; al cambiar la extensin del controlador frontal y al activarlo
previa captura de la extensin .php

4.2.2. Valoracin de resultados


La

PRUEBA 1.B

puede considerarse una alternativa viable en servidores

destinado al hospedaje de un nico VirtualHost. Sin embargo, restringe la

2016 Eugenia Bahit

11

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

adaptabilidad del programa a los cambios del sistema y el sistema, se ve


limitado por el requerimiento del programa. Por lo tanto, viola el principio
de independencia.

La

PRUEBA 1.D se realiz a n orientativo pero carece de valor metodolgico

por lo que su implementacin se descarta.

La

PRUEBA 1.E

responde a los nes metodolgicos sin presentar efectos

adyacentes que requieran de tratamiento especial.

4.3. Consideraciones particulares sobre los archivos de


conguracin general y distribuido (httpd.conf y
.htaccess )
Los archivos .htaccess se utilizan para realizar modicaciones en la conguracin
de Apache, a nivel de directorios especcos. Su uso ralentiza el servidor HTTP
de Apache. Se debe evitar el uso de archivos .htaccess por completo si se tiene
acceso al archivo de conguracin principal del servidor httpd (Apache HTTP

Server Tutorial: .htaccess les, consultado el 7/12/2016 a las 15:49 UTC).

5. Poltica de nombres para mdulos, modelos,


vistas y controladores
5.1. Poltica de nombres
Se utiliza como nombre de mdulo el nombre del modelo. Se utilizan el
nombre del modelo con los sujos  View y  Controller para crear las vistas y
controladores respectivamente.

La siguiente tabla dene el formato BNF para nombres de mdulos y clases de


la trada model-view-controller:

Componente
MDULO
MODELO
VISTA
CONTROLADOR

Formato

Ejemplos

<modelo>[.py|php|rb|pl|<other>]
<Modelo>
<Modelo>View
<Modelo>Controller

2016 Eugenia Bahit

12

foo.py | foo
Foo
FooView
FooController

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

5.2. Formato de la URI


/<modulo|modelo>/<recurso>[/<argumento>]

Ejemplos:

/producto/agregar
Supone la existencia del archivo:

<project>/application/modules/producto.<ext>
y de las clases:

Producto, ProductoView y ProductoController.

/usuario/ver/12
/cliente/buscar/lvarez+prez
Los valores <12> y <lvarez+prez> suponen argumentos con los
que trabajarn los recursos UsuarioController.ver y ClienteCon-

troller.buscar respectivamente.

6. Archivo de control frontal ejecutable (eXecutable Front Controller - XFC-)


6.1. Objetivo
Manejar todas las solicitudes cursadas a la aplicacin a excepcin de las
peticiones al directorio esttico.

6.2. Responsabilidades
1. Invocar al controlador del mdulo solicitado por el usuario.
2. Manejar las solicitudes errneas o mal formuladas.

2016 Eugenia Bahit

13

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

6.3. Caractersticas
Dado que:

1. los objetos se manejan como punteros ntegramente en memoria;


2. la

responsabilidad

del

XFC

es

netamente

funcional,

careciendo

de

atributos que lo hagan distintivo; y, que


3. la actuacin del XFC es voltil y temporal.

se prescinde de tratar al XFC como un objeto, a n de evitar mantener en


memoria un componente cuya funcin es procedimental y carente de atributos
distintivos. Por lo tanto, las guras de un Application Handler y Application

Helper careceran de coherencia lgica aplicable.


Se establece al XFC como nico responsable del control general de la aplicacin.

6.4. Llamada al controlador solicitado


6.4.1. Saneamiento de variables de entorno implicadas
(ver seccin:  Archivo de inicializacin de variables de entorno de la aplicacin )

6.4.2. Validacin de la solicitud


Se instancia el controlador
directorio de mdulos

(C),

si -y solo s- el mdulo

(m)

se encuentra en el

(M ) del sistema. Con esta nica validacin se previene la

importacin de componentes que no contengan recursos pblicos.

Se entiende como recurso pblico a cualquier mtodo de un


controlador, cuya instanciacin sea consecuencia de una solicitud
directa desde la URL.

(m M ) C

Se invoca el recurso

(r)

solo si es atributo del controlador

(C):

(r C) r

2016 Eugenia Bahit

14

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

6.5. Manejo de solicitudes errneas


Se considera solicitud errnea (error request)

err(Rq)

a cualquier peticin

donde:

(C) (r) err(Rq)

Al recibirse un

err(Rq),

predenido por defecto


HTTP, a

rn

se realiza una redireccin


o se establece

location()

a un recurso

set() el cdigo de estado st del servidor

404 Not Found:

err(Rq) location(rn ) set(st, 404)

6.5.1. Cuestiones de seguridad en la modicacin del cdigo de


estado
404 Not Found y enviado como
cabecera del tipo Content-type no es

Cuando el cdigo de estado es establecido a


campo de cabecera, si un campo de

enviado, el servidor podra exponer el intrprete del script CGI como se muestra
en el cuadro 1.

eugenia@debian-warrior:~/lab/mvcgi$ wget -S http://mvcgi.local/not/found


--2016-12-04 20:26:38-- http://mvcgi.local/not/found
Resolviendo mvcgi.local (mvcgi.local)... 127.0.0.1
Conectando con mvcgi.local (mvcgi.local)[127.0.0.1]:80... conectado.
Peticin HTTP enviada, esperando respuesta...
HTTP/1.1 404 Not Found
Date: Sun, 04 Dec 2016 23:26:38 GMT
Server: Apache/2.2.22 (Debian)
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/x-python
2016-12-04 20:26:38 ERROR 404: Not Found.

Cuadro 3: Respuesta enviada por el servidor HTTP a una solicitud errnea. El


cdigo de estado se modica sin modicar el campo Content-type. El servidor,
revela el intrprete del script.

Content-type (M IM E), debe ser enviado


Status es modicado y toda vez que se deba

Por lo tanto, el campo de encabezado


cuando un campo de cabecera
enviar una respuesta.

err(Rq) set(St, 404) set(M IM E)

2016 Eugenia Bahit

15

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

6.6. Modicacin de los cdigos de respuesta del servidor


HTTP
La lnea de inicio de la respuesta del servidor HTTP -incluyendo la versin del
servidor (HTTP/1.1)- es respondida por el propio servidor inmediatamente al
recibir la solicitud. A nivel del programa CGI, deben emplearse los campos de
encabezado a n de modicar cualquier cabecera que se desee que el servidor
HTTP responda.

Por lo tanto, para modicar el cdigo de estado, debe emplearse Status como
campo de encabezado, con su cdigo de estado correspondiente, deniendo dicha
respuesta con el siguiente formato:

Status: <status-code> <reason-phrase>\n

Ejemplos:

Status: 404 Not Found\n


Status: 307 Temporary Redirect\n

Ver seccin 9 en la pgina 20 para un resumen de la RFC7230 destinada a


la sintaxis de los mensajes del protocolo HTTP [RFC7230: Hypertext Transfer

Protocol (HTTP/1.1): Message Syntax and Routing ].

6.7. Cdigo de ejemplo de un XFC en Python


Este algoritmo toma todas las

CONSTANTES

de entorno de la aplicacin desde el

archivo de inicializacin de variables (ver seccin Archivo de Inicializacin de

Variables ).

# Para la comprobacin de C y m
error_module = error_resource = True
# Implementacin de (m M ) C
if isfile(MODULE_PATH):
modulo = __import__(PACKAGE, fromlist=[CONTROLLER])
controller = getattr(modulo, CONTROLLER)()

2016 Eugenia Bahit

16

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

error_module = False
# Implementacin de (r C) r
if not error_module and hasattr(controller, RESOURCE):
getattr(controller, RESOURCE)()
error_resource = False
# Implementacin de err(Rq) location(rn ) set(st, 404)
if error_module or error_resource:
error_header = "{}{}\n".format(HTTP_404, HTTP_HTML)
print error_header if SHOW_ERROR_404 else HTTP_REDIRECT

7. Archivo de inicializacin de variables de


entorno de la aplicacin
7.1. Responsabilidad del archivo de inicializacin de
variables
Es responsabilidad de este archivo la inicializacin de las variables de entorno
de la aplicacin y su correspondiente saneamiento.

7.2. Variables de entorno


Se denen las siguientes variables, como variables de entorno de mbito glob-

Variables congurables son denidas en el archivo de conguracin e importadas por


el archivo de inicializacin.
al. Las variables de entorno no son variables congurables.

URI_LIST

Cada una de las partes que conforman el valor de REQUEST_URI,


utilizando como elemento divisor la barra diagonal /. Necesaria
para el anlisis de la URI (a partir de la URI se obtiene el mdulo
y el recurso solicitado por el usuario).

MODULE

Nombre del mdulo solicitado por el usuario (primer elemento de


la URI luego de la primera /). Necesaria para obtener la ruta del
archivo y los nombres de las clases de la trada MVC.

2016 Eugenia Bahit

17

Licencia GNU FDL

MVCGI 1.0.5

PACKAGE

Diciembre 2016

Espacio de nombre del mdulo en el sistema. Necesario para su


importacin.

MODULE_PATH

Ruta del archivo del mdulo. Necesaria para validar que se trate

de un mdulo autorizado.

CONTROLLER

Nombre del controlador a ser instanciado.

RESOURCE

Nombre del recurso (del controlador) a ser invocado.

ARG

Valor del argumento pasado por la URI.

Variables exclusivas para modicacin de las cabeceras del servidor


HTTP:
HTTP_404

Cadena

de

respuesta

del

servidor

HTTP/1.1

errneas, con el campo de encabezado Status:

para

solicitudes

Status: 404 Not

Found\n
HTTP_HTML

Cadena de respuesta del servidor HTTP/1.1 para solicitudes de


contenido HTML:

REDIRECT_URL

Content-type: text/html; charset=utf-8\n

Cadena de respuesta del servidor HTTP/1.1 para redirecciones

en caso de solicitudes errneas que no sean respondidas con un


cdigo de respuesta 404.

7.3. Cuestiones de seguridad relativas a la inicializacin


de las variables
MODULE
Nombres

de

mdulo

que

contengan

el

signo

.

podran

provocar

una

vulnerabilidad de seguridad en la validacin de la ruta. Debern sustituirse


todas las apariciones del . (punto) en el nombre del mdulo ANTES de ser
asignado como valor de MODULE.

MODULE = <valor>.replace('.', )

2016 Eugenia Bahit

18

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

RESOURCE, ARG
Un valor
en

la

NULL o FALSE en estas variables, podra generar respuestas inesperadas

aplicacin

provocando

en

consecuencia,

un

exceso

de

validaciones

destinadas a prevenir vulnerabilidades de seguridad.

El uso de condicionales ternarios para establecer un valor por defecto en caso


de valores nulos se postula como alternativa viable.

Ejemplo en Python:
RESOURCE = URI_LIST[1] if len(URI_LIST) > 1 else 

Mismo ejemplo en PHP:


$RESOURCE = (count($URI_LIST) > 1) ? $URI_LIST[1] : ;

Aproximacin en Ruby:
RESOURCE = (URL_LIST.length > 1) ? URI_LIST[1] : 

Aproximacin en Perl:
$RESOURCE = (@URL_LIST > 1) ? $URI_LIST[1] : ;

AVISO: el cdigo fuente citado como aproximacin debera ser validado antes
de su implementacin.

8. Archivo de conguracin
Se destina el archivo de conguracin a la denicin de toda aquella variable
cuyo valor relativo dependa del ncleo o motor del programa.

Corresponde al desarrollador de frameworks o Ingeniero del ncleo, denir las


variables que sean necesarias en este archivo.

2016 Eugenia Bahit

19

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

Corresponde al programador de aplicaciones de usuario (aplicacin nal)


congurar el valor de las variables denidas en este archivo.

Las variables denidas en el archivo de conguracin son requeridas por el


archivo de inicializacin de variables de entorno. La denicin de variables
de conguracin por parte del programador de aplicaciones de usuario podra
generar vulnerabilidades de seguridad imprevistas. A criterio del desarrollador
de frameworks

o Ingeniero del ncleo queda permitir -o no- el agregado

de variables en este archivo y en consecuencia, a su responsabilidad queda


implementar las medidas de seguridad necesarias para evitar la aparicin de
vulnerabilidades que afecten al ncleo del sistema.

8.1. Variables de conguracin sugeridas


Estas variables podran ser requeridas por el archivo de inicializacin y/o por el
XFC:

string

DEFAULT_RESOURCE
Denicin de la URI de un recurso por defecto. Necesaria para el
manejo de solicitudes errneas.

bool

SHOW_ERROR_404
Se establece en True para responder un cdigo de estado 404 en caso
de solicitud errnea.
Se establece en False, para redirigir al recurso por defecto en el
mismo escenario.

9. Consideraciones generales sobre los encabezados del servidor HTTP/1.1


9.1. Aviso legal sobre la seccin
Las recomendaciones de seguridad de esta seccin se basan en su totalidad, en
las recomendaciones de Fielding & Reschke expuestas en la RFC7230. Dada la

2016 Eugenia Bahit

20

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

condicin restrictiva de la licencia de publicacin de las RCF, esta seccin se


ha limitado a la cita de las partes signicativas de la misma pero se ha evitado
cualquier interpretacin, mejora o trabajo derivado de la misma.

Las RFC citadas en esta seccin son de licencia privativa. Este


documento es de licencia libre. En trabajos derivados de este
documento, la licencia privativa de las RFC, podra afectar
directamente a la obra derivada. Se recomienda evitar la mencin de
esta seccin y referirse a las fuentes originales, para evitar conictos
legales en los trabajos derivados.

9.2. Recomendaciones para la modicacin de encabezados segn las RFC


La RFC7230 postula que todos los mensajes HTTP/1.1 deben comenzar con
una lnea de inicio seguida de cero o ms lneas de campos de cabecera, una
lnea vaca que indique el nal de la seccin de cabeceras y, opcionalmente, un
cuerpo de mensaje (Fielding & Reschke, 2014).

start-line
*(header-field CRLF)
CRLF
[message-body]

Debe tomarse la precaucin de no enviar espacios en blanco entre la lnea de


inicio y el primer encabezado (Fielding & Reschke, 2014).

A n de evitar vulnerabilidades de seguridad producidas por el procesamiento


errneo de secuencias de caracteres multibyte que contengan el octeto LF
( %x0A) (Fielding & Reschke, 2014), la codicacin de caracteres no ASCII,
se hace explcita en la respuesta HTTP. Un ejemplo de uso correcto sera el
siguiente:

Content-type: text/html; charset=utf-8\n

2016 Eugenia Bahit

21

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

9.3. Lnea de inicio


Una lnea de inicio puede ser de dos tipos: de solicitud o de estado (Fielding
& Reschke, 2014). Para una explicacin detallada sobre las lneas de solicitud,

referirse a la seccin 3.1.1 de la RFC7230 .

Una lnea de estado debe cumplir el siguiente formato:

<HTTP-version> <status-code> <reason-phrase>\n


HTTP-version = HTTP/<n_mayor>.<n_menor>
status-code = cdigo de 3 dgitos (ej.: 200, 403, 404, 500)

Ejemplos:

HTTP/1.1 200 Ok\n


HTTP/1.1 404 Not Found\n

Para una lista completa de cdigos de estado HTTP/1.1, vase la seccin 6.1

de la RFC7231 .

9.4. Campos de encabezado


Los campos de encabezado deben enviarse, luego de la lnea de inicio, empleando
el siguiente formato:

<field-name>:[OWS]<field-value>[OWS]\n
OWS = Optional White Space

Srvase ver los ejemplos de la seccin 6.6 en la pgina 16.

9.5. Fuentes de documentacin originales


Para una referencia completa sobre el comportamiento de cabeceras, referirse a
las RFC723X en https://tools.ietf.org/html/rfc<n> (sustituir <n> por la RFC
correspondiente de la siguiente lista):

2016 Eugenia Bahit

22

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

RFC7230:

HTTP/1.1: Message Syntax and Routing

RFC7231:

HTTP/1.1: Semantics and Content

RFC7232:

HTTP/1.1: Conditional Requests

RFC7233:

HTTP/1.1: Range Requests

RFC7234:

HTTP/1.1: Caching

RFC7235:

HTTP/1.1: Authentication

10. Correspondencia
Eugenia Bahit - LAECI.org
483 Green Lanes. N13 4BS London, United Kingdom
TE: +44 (161) 818-7925
EMail: eugenia.bahit@laeci.org

Notes

RFC3875: https://tools.ietf.org/html/rfc3875

https://httpd.apache.org/docs/current/misc/perf-tuning.html

https://httpd.apache.org/docs/current/misc/security_tips.html

https://httpd.apache.org/docs/current/vhosts/

https://httpd.apache.org/docs/current/rewrite/

https://httpd.apache.org/docs/current/howto/htaccess.html

https://httpd.apache.org/docs/current/mod/core.html#allowoverride

RFC7230: https://tools.ietf.org/html/rfc7230

RFC7231: https://tools.ietf.org/html/rfc7231

2016 Eugenia Bahit

23

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

Parte III
GNU Free Documentation
License
Version 1.3, 3 November 2008 Copyright
Software Foundation, Inc.

2000, 2001, 2002, 2007, 2008 Free

<http://fsf.org/>

Everyone is permitted to copy

and distribute verbatim copies of this license document, but changing it is not
allowed.

Preamble
The purpose of this License is to make a manual, textbook, or other functional
and useful document free in the sense of freedom: to assure everyone the
eective freedom to copy and redistribute it, with or without modifying it,
either commercially or noncommercially. Secondarily, this License preserves for
the author and publisher a way to get credit for their work, while not being
considered responsible for modications made by others. This License is a kind of
copyleft, which means that derivative works of the document must themselves
be free in the same sense. It complements the GNU General Public License,
which is a copyleft license designed for free software. We have designed this
License in order to use it for manuals for free software, because free software
needs free documentation: a free program should come with manuals providing
the same freedoms that the software does. But this License is not limited to
software manuals; it can be used for any textual work, regardless of subject
matter or whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.

1. APPLICABILITY AND DEFINITIONS


This License applies to any manual or other work, in any medium, that contains
a notice placed by the copyright holder saying it can be distributed under the
terms of this License. Such a notice grants a world-wide, royalty-free license,
unlimited in duration, to use that work under the conditions stated herein. The

2016 Eugenia Bahit

24

Licencia GNU FDL

MVCGI 1.0.5

Document,

Diciembre 2016

below, refers to any such manual or work. Any member of the

public is a licensee, and is addressed as 

you. You accept the license if you copy,

modify or distribute the work in a way requiring permission under copyright


law. A 

Modied Version

of the Document means any work containing the

Document or a portion of it, either copied verbatim, or with modications


and/or translated into another language. A 

Secondary Section

is a named

appendix or a front-matter section of the Document that deals exclusively with


the relationship of the publishers or authors of the Document to the Document's
overall subject (or to related matters) and contains nothing that could fall
directly within that overall subject. (Thus, if the Document is in part a textbook
of mathematics, a Secondary Section may not explain any mathematics.) The
relationship could be a matter of historical connection with the subject or
with related matters, or of legal, commercial, philosophical, ethical or political
position regarding them. The 

Invariant Sections

are certain Secondary

Sections whose titles are designated, as being those of Invariant Sections, in


the notice that says that the Document is released under this License. If a
section does not t the above denition of Secondary then it is not allowed to
be designated as Invariant. The Document may contain zero Invariant Sections.
If the Document does not identify any Invariant Sections then there are none.
The 

Cover Texts

are certain short passages of text that are listed, as Front-

Cover Texts or Back-Cover Texts, in the notice that says that the Document
is released under this License. A Front-Cover Text may be at most 5 words,
and a Back-Cover Text may be at most 25 words. A 

Transparent

copy of

the Document means a machine-readable copy, represented in a format whose


specication is available to the general public, that is suitable for revising the
document straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available drawing
editor, and that is suitable for input to text formatters or for automatic
translation to a variety of formats suitable for input to text formatters. A copy
made in an otherwise Transparent le format whose markup, or absence of
markup, has been arranged to thwart or discourage subsequent modication
by readers is not Transparent. An image format is not Transparent if used
for any substantial amount of text. A copy that is not Transparent is called


Opaque.

Examples of suitable formats for Transparent copies include plain

ASCII without markup, Texinfo input format, LaTeX input format, SGML or
XML using a publicly available DTD, and standard-conforming simple HTML,
PostScript or PDF designed for human modication. Examples of transparent
image formats include PNG, XCF and JPG. Opaque formats include proprietary
formats that can be read and edited only by proprietary word processors, SGML
or XML for which the DTD and/or processing tools are not generally available,

2016 Eugenia Bahit

25

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

and the machine-generated HTML, PostScript or PDF produced by some word


processors for output purposes only. The 

Title Page

means, for a printed

book, the title page itself, plus such following pages as are needed to hold,
legibly, the material this License requires to appear in the title page. For works
in formats which do not have any title page as such, Title Page means the text
near the most prominent appearance of the work's title, preceding the beginning
of the body of the text. The 

publisher

means any person or entity that

distributes copies of the Document to the public. A section 

Entitled XYZ

means a named subunit of the Document whose title either is precisely XYZ
or contains XYZ in parentheses following text that translates XYZ in another
language. (Here XYZ stands for a specic section name mentioned below, such
as 

Acknowledgements,  Dedications,  Endorsements, or  History.)


Preserve the Title of such a section when you modify the Document

To 

means that it remains a section Entitled XYZ according to this denition.


The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty Disclaimers
are considered to be included by reference in this License, but only as regards
disclaiming warranties: any other implication that these Warranty Disclaimers
may have is void and has no eect on the meaning of this License.

2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially
or noncommercially, provided that this License, the copyright notices, and the
license notice saying this License applies to the Document are reproduced in
all copies, and that you add no other conditions whatsoever to those of this
License. You may not use technical measures to obstruct or control the reading
or further copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough number
of copies you must also follow the conditions in section 3. You may also lend
copies, under the same conditions stated above, and you may publicly display
copies.

3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed
covers) of the Document, numbering more than 100, and the Document's license
notice requires Cover Texts, you must enclose the copies in covers that carry,

2016 Eugenia Bahit

26

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover,
and Back-Cover Texts on the back cover. Both covers must also clearly and
legibly identify you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and visible. You may
add other material on the covers in addition. Copying with changes limited
to the covers, as long as they preserve the title of the Document and satisfy
these conditions, can be treated as verbatim copying in other respects. If the
required texts for either cover are too voluminous to t legibly, you should
put the rst ones listed (as many as t reasonably) on the actual cover, and
continue the rest onto adjacent pages. If you publish or distribute Opaque copies
of the Document numbering more than 100, you must either include a machinereadable Transparent copy along with each Opaque copy, or state in or with
each Opaque copy a computer-network location from which the general networkusing public has access to download using public-standard network protocols a
complete Transparent copy of the Document, free of added material. If you
use the latter option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this Transparent copy
will remain thus accessible at the stated location until at least one year after
the last time you distribute an Opaque copy (directly or through your agents
or retailers) of that edition to the public. It is requested, but not required, that
you contact the authors of the Document well before redistributing any large
number of copies, to give them a chance to provide you with an updated version
of the Document.

4. MODIFICATIONS
You may copy and distribute a Modied Version of the Document under the
conditions of sections 2 and 3 above, provided that you release the Modied
Version under precisely this License, with the Modied Version lling the role
of the Document, thus licensing distribution and modication of the Modied
Version to whoever possesses a copy of it. In addition, you must do these things
in the Modied Version:

A. Use in the Title Page (and on the covers, if any) a title distinct from that
of the Document, and from those of previous versions (which should, if
there were any, be listed in the History section of the Document). You
may use the same title as a previous version if the original publisher of
that version gives permission.

2016 Eugenia Bahit

27

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

B. List on the Title Page, as authors, one or more persons or entities


responsible for authorship of the modications in the Modied Version,
together with at least ve of the principal authors of the Document (all
of its principal authors, if it has fewer than ve), unless they release you
from this requirement.
C. State on the Title page the name of the publisher of the Modied Version,
as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modications adjacent to
the other copyright notices.
F. Include, immediately after the copyright notices, a license notice giving
the public permission to use the Modied Version under the terms of this
License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections and
required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled History, Preserve its Title, and add to it
an item stating at least the title, year, new authors, and publisher of the
Modied Version as given on the Title Page. If there is no section Entitled
History in the Document, create one stating the title, year, authors, and
publisher of the Document as given on its Title Page, then add an item
describing the Modied Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for public
access to a Transparent copy of the Document, and likewise the network
locations given in the Document for previous versions it was based on.
These may be placed in the History section. You may omit a network
location for a work that was published at least four years before the
Document itself, or if the original publisher of the version it refers to
gives permission.
K. For any section Entitled Acknowledgements or Dedications, Preserve
the Title of the section, and preserve in the section all the substance and
tone of each of the contributor acknowledgements and/or dedications given
therein.
L. Preserve all the Invariant Sections of the Document, unaltered in their text
and in their titles. Section numbers or the equivalent are not considered
part of the section titles.

2016 Eugenia Bahit

28

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

M. Delete any section Entitled Endorsements. Such a section may not be


included in the Modied Version.
N. Do not retitle any existing section to be Entitled Endorsements or to
conict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.

If the Modied Version includes new front-matter sections or appendices


that qualify as Secondary Sections and contain no material copied from the
Document, you may at your option designate some or all of these sections
as invariant. To do this, add their titles to the list of Invariant Sections in
the Modied Version's license notice. These titles must be distinct from any
other section titles. You may add a section Entitled Endorsements, provided it
contains nothing but endorsements of your Modied Version by various parties
for example, statements of peer review or that the text has been approved by
an organization as the authoritative denition of a standard. You may add a
passage of up to ve words as a Front-Cover Text, and a passage of up to 25
words as a Back-Cover Text, to the end of the list of Cover Texts in the Modied
Version. Only one passage of Front-Cover Text and one of Back-Cover Text may
be added by (or through arrangements made by) any one entity. If the Document
already includes a cover text for the same cover, previously added by you or by
arrangement made by the same entity you are acting on behalf of, you may not
add another; but you may replace the old one, on explicit permission from the
previous publisher that added the old one. The author(s) and publisher(s) of
the Document do not by this License give permission to use their names for
publicity for or to assert or imply endorsement of any Modied Version.

5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms dened in section 4 above for modied versions,
provided that you include in the combination all of the Invariant Sections of all
of the original documents, unmodied, and list them all as Invariant Sections
of your combined work in its license notice, and that you preserve all their
Warranty Disclaimers. The combined work need only contain one copy of this
License, and multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but dierent
contents, make the title of each such section unique by adding at the end of it,
in parentheses, the name of the original author or publisher of that section if

2016 Eugenia Bahit

29

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

known, or else a unique number. Make the same adjustment to the section titles
in the list of Invariant Sections in the license notice of the combined work. In the
combination, you must combine any sections Entitled History in the various
original documents, forming one section Entitled History; likewise combine any
sections Entitled Acknowledgements, and any sections Entitled Dedications.
You must delete all sections Entitled Endorsements.

6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this License
in the various documents with a single copy that is included in the collection,
provided that you follow the rules of this License for verbatim copying of each
of the documents in all other respects. You may extract a single document from
such a collection, and distribute it individually under this License, provided you
insert a copy of this License into the extracted document, and follow this License
in all other respects regarding verbatim copying of that document.

7. AGGREGATION WITH INDEPENDENT


WORKS
A compilation of the Document or its derivatives with other separate and
independent documents or works, in or on a volume of a storage or distribution
medium, is called an aggregate if the copyright resulting from the compilation
is not used to limit the legal rights of the compilation's users beyond what
the individual works permit. When the Document is included in an aggregate,
this License does not apply to the other works in the aggregate which are not
themselves derivative works of the Document. If the Cover Text requirement of
section 3 is applicable to these copies of the Document, then if the Document
is less than one half of the entire aggregate, the Document's Cover Texts may
be placed on covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form. Otherwise
they must appear on printed covers that bracket the whole aggregate.

8. TRANSLATION

2016 Eugenia Bahit

30

Licencia GNU FDL

MVCGI 1.0.5

Translation

is

Diciembre 2016

considered

kind

of

modication,

so

you

may

distribute

translations of the Document under the terms of section 4. Replacing Invariant


Sections with translations requires special permission from their copyright
holders, but you may include translations of some or all Invariant Sections in
addition to the original versions of these Invariant Sections. You may include
a translation of this License, and all the license notices in the Document, and
any Warranty Disclaimers, provided that you also include the original English
version of this License and the original versions of those notices and disclaimers.
In case of a disagreement between the translation and the original version of this
License or a notice or disclaimer, the original version will prevail. If a section in
the Document is Entitled Acknowledgements, Dedications, or History, the
requirement (section 4) to Preserve its Title (section 1) will typically require
changing the actual title.

9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as
expressly provided under this License. Any attempt otherwise to copy, modify,
sublicense, or distribute it is void, and will automatically terminate your rights
under this License. However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a) provisionally, unless
and until the copyright holder explicitly and nally terminates your license, and
(b) permanently, if the copyright holder fails to notify you of the violation by
some reasonable means prior to 60 days after the cessation. Moreover, your
license from a particular copyright holder is reinstated permanently if the
copyright holder noties you of the violation by some reasonable means, this
is the rst time you have received notice of violation of this License (for any
work) from that copyright holder, and you cure the violation prior to 30 days
after your receipt of the notice. Termination of your rights under this section
does not terminate the licenses of parties who have received copies or rights from
you under this License. If your rights have been terminated and not permanently
reinstated, receipt of a copy of some or all of the same material does not give
you any rights to use it.

10. FUTURE REVISIONS OF THIS LICENSE


The Free Software Foundation may publish new, revised versions of the GNU
Free Documentation License from time to time. Such new versions will be

2016 Eugenia Bahit

31

Licencia GNU FDL

MVCGI 1.0.5

Diciembre 2016

similar in spirit to the present version, but may dier in detail to address new
problems or concerns. See

http://www.gnu.org/copyleft/.

Each version of

the License is given a distinguishing version number. If the Document species


that a particular numbered version of this License or any later version applies
to it, you have the option of following the terms and conditions either of that
specied version or of any later version that has been published (not as a draft)
by the Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not as a
draft) by the Free Software Foundation. If the Document species that a proxy
can decide which future versions of this License can be used, that proxy's public
statement of acceptance of a version permanently authorizes you to choose that
version for the Document.

11. RELICENSING
Massive Multiauthor Collaboration Site (or MMC Site) means any World
Wide

Web

server

that

publishes

copyrightable

works

and

also

provides

prominent facilities for anybody to edit those works. A public wiki that
anybody can edit is an example of such a server. A Massive Multiauthor
Collaboration (or MMC) contained in the site means any set of copyrightable
works thus published on the MMC site. CC-BY-SA means the Creative
Commons Attribution-Share Alike 3.0 license published by Creative Commons
Corporation, a not-for-prot corporation with a principal place of business in
San Francisco, California, as well as future copyleft versions of that license
published

by

that

same

organization.

Incorporate

means

to

publish

or

republish a Document, in whole or in part, as part of another Document. An


MMC is eligible for relicensing if it is licensed under this License, and if all
works that were rst published under this License somewhere other than this
MMC, and subsequently incorporated in whole or in part into the MMC, (1)
had no cover texts or invariant sections, and (2) were thus incorporated prior
to November 1, 2008. The operator of an MMC Site may republish an MMC
contained in the site under CC-BY-SA on the same site at any time before
August 1, 2009, provided the MMC is eligible for relicensing.

2016 Eugenia Bahit

32

Licencia GNU FDL