Common Gateway Interface

Anuncio
Diseño de Servicos Web
© Francisco Rosales <[email protected]>
Introducción
Common Gateway Interface
(Interfaz Público de Pasarela)
!
El HTML era algo estático
!
!
No satisfacía las necesidades de interactividad
!
Francisco Rosales
<[email protected]>
!
Todo acceso a una hoja, daba el mismo resultado
Documentos de contenido exclusivo para el acceso
Se creó el Common Gateway Interface
!
Un estándar que especifica como interconectar
aplicaciones externas con servidores de información
!
Ej. un servidor Web
1
Funcionamiento básico
!
!
!
Ejemplo
Cuando accedamos a un CGI:
!
!
Será ejecutado en el servidor en ese instante
La información dinámica que produzca será
presentada como resultado del acceso
!
!
!
Consulta desde el navegador web
!
El usuario:
!
!
Usos:
!
2
!
El servidor Web:
!
El programa CGI:
!
Contadores de accesos a las páginas
Anuncios incrustados (banners)
Buscadores
etc.
!
!
Common Gateway Interface
Ejecuta (localmente) el CGI con los datos del formulario
Accede a la BD y, con el resultado, produce un documento
HTML
El servidor Web:
!
3
Rellena un formulario HTML y lo envía
La acción asociada es URL a un CGI
Devuelve el documento, casi directamente, al navegador
4
1
Diseño de Servicos Web
© Francisco Rosales <[email protected]>
Ventajas e Inconvenientes
!
Ventajas
!
!
!
Mejora la seguridad de los usuarios
!
No tendrán que ejecutar programas extraños en su máquina
Al estar centralizado, se eliminan los problemas de
mantenimiento y distribución de las aplicaciones
!
!
Inconvenientes
!
Puede comprometer la seguridad del servidor
!
Todos los programas CGI suelen residir en
un directorio especial del servidor:
!
Simplifica la gestión de los servicios
!
!
Precauciones de seguridad
/cgi-bin
Bajo control del webmaster
El Administrador puede relajar esta
restricción, pero no suele hacerse
Dejar que cualquiera ejecute algo en el servidor, aunque lo
hayamos escrito nosotros, no es muy seguro
5
Lenguajes de Programación
!
!
!
!
Ejemplo: test.cgi
No hay restricción
Compilables:
!
#!/bin/sh
echo "Content-type: text/plain"
echo ""
set -v
### Activa modo verbose del shell
exec 2>&1 ### Dirige el error a la salida estd.
echo "$0" #................. Nombre del mandato
echo "$@" #........... Argumentos de invocación
id #..................... Identidad del proceso
pwd #............. Directorio actual de trabajo
env #..................... Variables de entorno
cat #...... Información en la entrada estandard
#.......................................... FIN
C, C++, Fortran, etc.
El ejecutable deberá estar en /cgi-bin
Interpretados:
!
!
!
El script, directamente ejecutable, en /cgi-bin
Es mucho más fácil depurar, modificar y mantener
Se usa mucho perl
!
6
Muy potente pero bastante complejo
7
Common Gateway Interface
8
2
Diseño de Servicos Web
© Francisco Rosales <[email protected]>
Para que funcione como CGI
!
¿Cómo invocar un CGI? I
El servidor Web distingue un CGI de
cualquier otro fichero convencional:
!
!
Debe residir en /cgi-bin del sistema
(o de la cuenta del usuario)
!
Indicando su URL en el campo Location
Al recorrer un hipervínculo
!
Por su extensión:
!
!
Directamente desde el Navegador
Por su ubicación:
!
!
!
El nombre del fichero debe tener extensión .cgi
<A HREF="/cgi-bin/test.cgi" >
Enlace al CGI de pruebas
</A>
Por sus permisos:
!
Etiqueta A referida al URL
Lectura y ejecución para todo el mundo
9
¿Cómo invocar un CGI? II
!
¿Cómo invocar un CGI? III
Como origen de una imagen
!
!
10
!
La salida del CGI debe ser de tipo imagen
Es la forma de incrustar banners
Como acción asociada a un formulario
HTML
!
!
<IMG SRC="/cgi-bin/banner"
ALT="Inserte aquí su publicidad">
Es el uso más común de los CGI
El método de invocación (GET o POST)
establece la manera en que el CGI
recibirá los parámetros
<FORM ACTION="/cgi-bin/test.cgi"
METHOD="GET" >
11
Common Gateway Interface
12
3
Diseño de Servicos Web
© Francisco Rosales <[email protected]>
Paso de argumentos
!
!
Codificación URL
NO los reciben de la línea de mandatos
Pueden indicarse en el URL
!
http://.../cgi-bin/test.cgi/PATH_INFO?QUERY_STRING
!
!
!
!
!
Al CGI le llegan como variables de entorno
!
PATH_INFO
Los espacios en blanco se sustituyen por el
carácter '+'
Otros caracteres especiales, por su valor
hexadecimal con el prefijo '%'
Texto a partir del nombre hasta la 1ª '?'
Se suele usar para indicar caminos de búsqueda
QUERY_STRING
!
!
Texto desde la 1ª '?' hasta el final
Este texto debe estar codificado
13
Método de invocación I
!
!
!
Método de invocación II
Todo formulario HTML debe indicar:
!
!
La acción asociada: un programa CGI
El método de invocación: GET o POST
!
!
Como un conjunto de pares nombre=valor
Donde nombre, será el del atributo NAME de
cada etiqueta INPUT o SELECT
Los pares llegarán uno detrás de otro,
separados por el carácter '&'
!
!
Esta variable de entorno indicará el método de
invocación empleado
Si fue GET
!
Los datos llegarán (codificados) en la variable
QUERY_STRING
Si fue POST
!
!
15
Common Gateway Interface
REQUEST_METHOD
!
Los datos del formulario le llegarán al CGI:
!
14
Llegarán por la entrada estándar
La variable CONTENT_LENGTH indicará el número de
bytes de información
16
4
Diseño de Servicos Web
© Francisco Rosales <[email protected]>
Entorno de ejecución
!
!
!
Identificación del cliente
La especificación define unas variables que
el servidor Web debe poner en el entorno
de ejecución de los CGI
Se escriben en mayúsculas
Un valor nulo equivale a su no definición
!
REMOTE_ADDR
!
REMOTE_HOST
!
REMOTE_IDENT
!
!
!
!
!
Dirección IP del cliente que invocó al CGI
Dirección completa del cliente que invocó al CGI
Si el sistema cliente lo permite identificar usuarios,
indicará su nombre
No deberá ser usado nunca como autenticación
SCRIPT_NAME
!
URL completo al programa CGI
17
Identificación del servidor
!
!
!
Nombre del servidor como se indicó en el URL
!
El número de puerto del servicio web
!
Nombre y versión del software que implementa
el servidor
19
Common Gateway Interface
Versión del protocolo CGI implementado
DOCUMENT_ROOT
!
SERVER_SOFTWARE
!
GATEWAY_INTERFACE
!
SERVER_PORT
!
!
Sobre la conexión I
SERVER_NAME
!
18
Directorio raíz del servicio Web
HTTP_HOST
!
Nombre del servidor
20
5
Diseño de Servicos Web
© Francisco Rosales <[email protected]>
Sobre la conexión II
!
HTTP_REFERER
!
!
PATH_INFO
!
!
Identificación del navegador usado por el cliente
!
Cookie del usuario, si es que tiene
!
HTTPS
!
!
Es la concatenación de DOCUMENT_ROOT y
PATH_INFO
REQUEST_METHOD
!
Activa si el CGI fue invocado a través de un servidor
seguro
Camino extra expresado en el URL del CGI
PATH_TRANSLATED
HTTP_COOKIE
!
!
!
URL de la página desde la que se accedió al CGI
HTTP_USER_AGENT
!
!
Parámetros de entrada I
Método de invocación utilizado
QUERY_STRING
!
Parámetros pasados a un CGI mediante GET
21
Parámetros de entrada II
!
!
!
¿Qué puede devolver?
CONTENT_LENGTH
!
!
Tamaño del la información presente en la entrada
estándar o NULL
Puede venir de un POST o de un PUT de HTTP
!
Todo CGI deberá emitir por la salida
estándar su resultado
!
CONTENT_TYPE
!
22
!
Un documento MIME completo
O la localización del documento resultante
Indica el tipo MIME de la información presente en la
entrada estándar
Si vale NULL, se deberá deducir el tipo, y si no se
consigue se asumirá application/octet-stream
23
Common Gateway Interface
24
6
Diseño de Servicos Web
© Francisco Rosales <[email protected]>
Devolución de un documento
!
!
!
Devolución de una dirección
1ª linea: Content-Type: tipo MIME
2ª línea: en blanco
Resto: documento completo del tipo indicado
!
!
!
1ª línea: Location: URL local o remoto
2ª línea: en blanco
!
text/plain, image/gif, etc.
URL local: el propio servidor lo seguirá
Location: /pub/WWW/
Content-Type: text/html
<HEAD>
<TITLE> Título del documento dinámico</TITLE>
</HEAD>
<BODY>
....
</BODY>
!
URL remoto: el cliente ha de seguirlo
Location: http://www.w3.org/pub/WWW/
25
CGI con salida NPH
!
!
!
!
Direcciones de interés
Non Process Header
!
26
!
Exige el prefijo nphEl servidor conecta CGI y cliente y no filtra
El CGI toma control total de la conexión HTTP
!
!
Debe incluir al menos una línea indicando el
protocolo y el estado del acceso realizado
!
HTTP/1.0 200 Todo fue bien
Content-Type: .......
!
!
27
Common Gateway Interface
The Common Gateway Interface
http://hoohoo.ncsa.uiuc.edu/cgi/
CGI Made Really Easy
http://www.jmarshall.com/easy/cgi/
The World Wide Web Security FAQ
http://www.w3.org/Security/Faq/www-security-faq.html
Multitud de referencias
http://dir.yahoo.com/Computers_and_Internet/Internet/
World_Wide_Web/CGI___Common_Gateway_Interface/
Lista de enlaces relativos a CGIs
http://users.erols.com/foxdm/cgi.htm
CGI Programming 101
http://www.cgi101.com/class/
28
7
Descargar