Common Gateway Interface Interfaz Pblico de Pasarela Francisco
Common Gateway Interface (Interfaz Público de Pasarela) Francisco Rosales © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 1
Introducción n El HTML era algo estático n n No satisfacía las necesidades de interactividad n n Todo acceso a una hoja, daba el mismo resultado Documentos de contenido exclusivo para el acceso Se creó el Common Gateway Interface n Un estándar que especifica como interconectar aplicaciones externas con servidores de información n Ej. un servidor Web © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 2
Funcionamiento básico n Cuando accedamos a un CGI: n n n Será ejecutado en el servidor en ese instante La información dinámica que produzca será presentada como resultado del acceso Usos: n n Contadores de accesos a las páginas Anuncios incrustados (banners) Buscadores etc. © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 3
Ejemplo n Consulta desde el navegador web n El usuario: n n n El servidor Web: n n Ejecuta (localmente) el CGI con los datos del formulario El programa CGI: n n Rellena un formulario HTML y lo envía La acción asociada es URL a un CGI Accede a la BD y, con el resultado, produce un documento HTML El servidor Web: n Devuelve el documento, casi directamente, al navegador © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 4
Ventajas e Inconvenientes n Ventajas n Mejora la seguridad de los usuarios n n Simplifica la gestión de los servicios n n 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 n Puede comprometer la seguridad del servidor n Dejar que cualquiera ejecute algo en el servidor, aunque lo hayamos escrito nosotros, no es muy seguro © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 5
Precauciones de seguridad n n Todos los programas CGI suelen residir en un directorio especial del servidor: n /cgi-bin n Bajo control del webmaster El Administrador puede relajar esta restricción, pero no suele hacerse © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 6
Lenguajes de Programación n n No hay restricción Compilables: n n n C, C++, Fortran, etc. El ejecutable deberá estar en /cgi-bin Interpretados: n n n El script, directamente ejecutable, en /cgi-bin Es mucho más fácil depurar, modificar y mantener Se usa mucho perl n Muy potente pero bastante complejo © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 7
#!/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 Francisco Rosales Diseño de Servicios Web Ejemplo: test. cgi <frosal@fi. upm. es> Common Gateway Interface 8
Para que funcione como CGI n El servidor Web distingue un CGI de cualquier otro fichero convencional: n Por su ubicación: n n Por su extensión: n n Debe residir en /cgi-bin del sistema (o de la cuenta del usuario) El nombre del fichero debe tener extensión. cgi Por sus permisos: n Lectura y ejecución para todo el mundo © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 9
¿Cómo invocar un CGI? I n Directamente desde el Navegador n n Indicando su URL en el campo Location Al recorrer un hipervínculo n Etiqueta A referida al URL <A HREF="/cgi-bin/test. cgi" > Enlace al CGI de pruebas </A> © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 10
¿Cómo invocar un CGI? II n Como origen de una imagen n n 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"> © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 11
¿Cómo invocar un CGI? III n Como acción asociada a un formulario HTML n n 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" > © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 12
Paso de argumentos n n NO los reciben de la línea de mandatos Pueden indicarse en el URL http: //. . . /cgi-bin/test. cgi/PATH_INFO? QUERY_STRING n n PATH_INFO n n n Al CGI le llegan como variables de entorno Texto a partir del nombre hasta la 1ª '? ' Se suele usar para indicar caminos de búsqueda QUERY_STRING n n Texto desde la 1ª '? ' hasta el final Este texto debe estar codificado © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 13
Codificación URL n n Los espacios en blanco se sustituyen por el carácter '+' Otros caracteres especiales, por su valor hexadecimal con el prefijo '%' © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 14
Método de invocación I n Todo formulario HTML debe indicar: n n n 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: n n n 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 '&' © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 15
Método de invocación II n REQUEST_METHOD n n Si fue GET n n Esta variable de entorno indicará el método de invocación empleado Los datos llegarán (codificados) en la variable QUERY_STRING Si fue POST n n Llegarán por la entrada estándar La variable CONTENT_LENGTH indicará el número de bytes de información © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 16
Entorno de ejecución 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 © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 17
Identificación del cliente n REMOTE_ADDR n n REMOTE_HOST n n Dirección completa del cliente que invocó al CGI REMOTE_IDENT n n n Dirección IP 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 n URL completo al programa CGI © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 18
Identificación del servidor n SERVER_NAME n n SERVER_PORT n n Nombre del servidor como se indicó en el URL El número de puerto del servicio web SERVER_SOFTWARE n Nombre y versión del software que implementa el servidor © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 19
Sobre la conexión I n GATEWAY_INTERFACE n n DOCUMENT_ROOT n n Versión del protocolo CGI implementado Directorio raíz del servicio Web HTTP_HOST n Nombre del servidor © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 20
Sobre la conexión II n HTTP_REFERER n n HTTP_USER_AGENT n n Identificación del navegador usado por el cliente HTTP_COOKIE n n URL de la página desde la que se accedió al CGI Cookie del usuario, si es que tiene HTTPS n Activa si el CGI fue invocado a través de un servidor seguro © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 21
Parámetros de entrada I n PATH_INFO n n PATH_TRANSLATED n n Es la concatenación de DOCUMENT_ROOT y PATH_INFO REQUEST_METHOD n n Camino extra expresado en el URL del CGI Método de invocación utilizado QUERY_STRING n Parámetros pasados a un CGI mediante GET © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 22
Parámetros de entrada II n CONTENT_LENGTH n n n 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 n n 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 © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 23
¿Qué puede devolver? n Todo CGI deberá emitir por la salida estándar su resultado n n Un documento MIME completo O la localización del documento resultante © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 24
Devolución de un documento n n n 1ª linea: Content-Type: tipo MIME 2ª línea: en blanco Resto: documento completo del tipo indicado n text/plain, image/gif, etc. Content-Type: text/html <HEAD> <TITLE> Título del documento dinámico</TITLE> </HEAD> <BODY>. . </BODY> © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 25
Devolución de una dirección n n 1ª línea: Location: URL local o remoto 2ª línea: en blanco n URL local: el propio servidor lo seguirá Location: /pub/WWW/ n URL remoto: el cliente ha de seguirlo Location: http: //www. w 3. org/pub/WWW/ © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 26
CGI con salida NPH n Non Process Header n n 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 bien Content-Type: . . . . © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 27
Direcciones de interés n n n 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. w 3. org/Security/Faq/www-securityfaq. html Multitud de referencias http: //dir. yahoo. com/Computers_and_Internet/Inter net/World_Wide_Web/CGI___Common_Gateway_In terface/ Lista de enlaces relativos a CGIs http: //users. erols. com/foxdm/cgi. htm CGI Programming 101 http: //www. cgi 101. com/class/ © Francisco Rosales <frosal@fi. upm. es> Diseño de Servicios Web Common Gateway Interface 28
- Slides: 28