© Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface...

28
© Francisco Rosales <[email protected]> Diseño de Servicios Web 1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales <[email protected]>

Transcript of © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface...

Page 1: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

1

Common Gateway Interface

(Interfaz Público de Pasarela)

Francisco Rosales<[email protected]>

Page 2: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

2

Introducción El HTML era algo estático

Todo acceso a una hoja, daba el mismo resultado

No satisfacía las necesidades de interactividad 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

Page 3: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

3

Funcionamiento básico 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

Usos: Contadores de accesos a las páginas Anuncios incrustados (banners) Buscadores etc.

Page 4: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

4

Ejemplo Consulta desde el navegador web

El usuario: Rellena un formulario HTML y lo envía La acción asociada es URL a un CGI

El servidor Web: Ejecuta (localmente) el CGI con los datos del formulario

El programa CGI: Accede a la BD y, con el resultado, produce un

documento HTML El servidor Web:

Devuelve el documento, casi directamente, al navegador

Page 5: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

5

Ventajas e Inconvenientes Ventajas

Mejora la seguridad de los usuarios No tendrán que ejecutar programas extraños en su

máquina Simplifica la gestión de los servicios

Al estar centralizado, se eliminan los problemas de mantenimiento y distribución de las aplicaciones

Inconvenientes Puede comprometer la seguridad del servidor

Dejar que cualquiera ejecute algo en el servidor, aunque lo hayamos escrito nosotros, no es muy seguro

Page 6: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

6

Precauciones de seguridad Todos los programas CGI suelen

residir en un directorio especial del servidor: /cgi-bin Bajo control del webmaster

El Administrador puede relajar esta restricción, pero no suele hacerse

Page 7: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

7

Lenguajes de Programación No hay restricción Compilables:

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

Muy potente pero bastante complejo

Page 8: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

8

#!/bin/shecho "Content-type: text/plain"echo ""set -v ### Activa modo verbose del shellexec 2>&1 ### Dirige el error a la salida estd.echo "$0" #................. Nombre del mandatoecho "$@" #........... Argumentos de invocaciónid #..................... Identidad del procesopwd #............. Directorio actual de trabajoenv #..................... Variables de entornocat #...... Información en la entrada estandard#.......................................... FIN

Ejemplo: test.cgi

Page 9: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

9

Para que funcione como CGI El servidor Web distingue un CGI de

cualquier otro fichero convencional: Por su ubicación:

Debe residir en /cgi-bin del sistema(o de la cuenta del usuario)

Por su extensión: El nombre del fichero debe tener extensión

.cgi Por sus permisos:

Lectura y ejecución para todo el mundo

Page 10: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

10

¿Cómo invocar un CGI? I Directamente desde el Navegador

Indicando su URL en el campo Location

Al recorrer un hipervínculo

Etiqueta A referida al URL

<A HREF="/cgi-bin/test.cgi" >Enlace al CGI de pruebas</A>

Page 11: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

11

¿Cómo invocar un CGI? II Como origen de una imagen

La salida del CGI debe ser de tipo imagen

Es la forma de incrustar banners <IMG SRC="/cgi-bin/banner"

ALT="Inserte aquí su publicidad">

Page 12: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

12

¿Cómo invocar un CGI? III Como acción asociada a un

formulario HTML 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 CGIrecibirá los parámetros

<FORM ACTION="/cgi-bin/test.cgi" METHOD="GET" >

Page 13: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

13

Paso de argumentos 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

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

Page 14: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

14

Codificación URL Los espacios en blanco se

sustituyen por el carácter '+' Otros caracteres especiales, por su

valor hexadecimal con el prefijo '%'

Page 15: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

15

Método de invocación I Todo formulario HTML debe indicar:

La acción asociada: un programa CGI El método de invocación: GET o POST

Los datos del formulario le llegarán al CGI: 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 '&'

Page 16: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

16

Método de invocación II REQUEST_METHOD

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

Llegarán por la entrada estándar La variable CONTENT_LENGTH indicará el

número de bytes de información

Page 17: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

17

Entorno de ejecución 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

Page 18: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

18

Identificación del cliente REMOTE_ADDR

Dirección IP del cliente que invocó al CGI REMOTE_HOST

Dirección completa del cliente que invocó al CGI REMOTE_IDENT

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

Page 19: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

19

Identificación del servidor SERVER_NAME

Nombre del servidor como se indicó en el URL

SERVER_PORT El número de puerto del servicio web

SERVER_SOFTWARE Nombre y versión del software que

implementa el servidor

Page 20: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

20

Sobre la conexión I GATEWAY_INTERFACE

Versión del protocolo CGI implementado

DOCUMENT_ROOT Directorio raíz del servicio Web

HTTP_HOST Nombre del servidor

Page 21: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

21

Sobre la conexión II HTTP_REFERER

URL de la página desde la que se accedió al CGI HTTP_USER_AGENT

Identificación del navegador usado por el cliente HTTP_COOKIE

Cookie del usuario, si es que tiene HTTPS

Activa si el CGI fue invocado a través de un servidor seguro

Page 22: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

22

Parámetros de entrada I PATH_INFO

Camino extra expresado en el URL del CGI PATH_TRANSLATED

Es la concatenación de DOCUMENT_ROOT y PATH_INFO

REQUEST_METHOD Método de invocación utilizado

QUERY_STRING Parámetros pasados a un CGI mediante GET

Page 23: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

23

Parámetros de entrada II 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 CONTENT_TYPE

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

Page 24: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

24

¿Qué puede devolver? Todo CGI deberá emitir por la

salida estándar su resultado Un documento MIME completo O la localización del documento

resultante

Page 25: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

25

Devolución de un documento 1ª linea: Content-Type: tipo MIME 2ª línea: en blanco Resto: documento completo del tipo

indicado text/plain, image/gif, etc.

Content-Type: text/html

<HEAD><TITLE> Título del documento dinámico</TITLE></HEAD><BODY>....</BODY>

Page 26: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

26

Devolución de una dirección 1ª línea: Location: URL local o

remoto 2ª línea: en blanco

URL local: el propio servidor lo seguirá

URL remoto: el cliente ha de seguirlo

Location: http://www.w3.org/pub/WWW/

Location: /pub/WWW/

Page 27: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

27

CGI con salida NPH Non Process Header

Exige el prefijo nph- El 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 bienContent-Type: .......

Page 28: © Francisco Rosales Diseño de Servicios Web Common Gateway Interface1 Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales.

© Francisco Rosales <[email protected]>

Diseño de Servicios Web Common Gateway Interface

28

Direcciones de interés 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 referenciashttp://dir.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/CGI___Common_Gateway_Interface/

Lista de enlaces relativos a CGIshttp://users.erols.com/foxdm/cgi.htm

CGI Programming 101http://www.cgi101.com/class/