cgi.pdf
TRANSCRIPT
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 1
Common Gateway Interface (Interfaz Pblico de Pasarela)
Francisco Rosales
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 2
Introduccin La Web era de contenido esttico
Todo acceso a una hoja, daba el mismo resultado
No satisfaca las necesidades de interactividad Documentos de contenido exclusivo para el acceso
Se cre el Common Gateway Interface Un estndar que especifica como interconectar
aplicaciones externas con servidores de informacin Ej. aplicacin externa: Una consulta a BBDD Ej. servidor de informacin: Un servidor Web
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 3
Funcionamiento bsico Cuando accedamos a un CGI:
Ser ejecutado en el servidor en ese instante La informacin dinmica que produzca ser
presentada como resultado del acceso
Usos: Contadores de accesos a las pginas Anuncios incrustados (banners) Buscadores etc.
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 4
Ejemplo Consulta desde el navegador web
El usuario: Rellena un formulario HTML y lo enva La accin 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 ad-hoc
El servidor Web: Devuelve el documento, casi directamente, al navegador
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 5
Ventajas e Inconvenientes Ventajas
Mejora la seguridad de los usuarios No tendrn que ejecutar programas extraos en su mquina
Simplifica la gestin de los servicios Al estar centralizado, se eliminan los problemas de
mantenimiento y distribucin de las aplicaciones
Inconvenientes Puede comprometer la seguridad del servidor
Que se ejecute algo en el servidor, aunque lo hayamos escrito nosotros, no es muy seguro y carga el sistema
-
Francisco Rosales
Diseo 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 restriccin, pero no suele hacerse
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 7
Lenguajes de Programacin No hay restriccin Compilables:
C, C++, Fortran, etc. El ejecutable deber estar en /cgi-bin
Interpretados: El script, directamente ejecutable, en /cgi-bin Es mucho ms fcil depurar, modificar y mantener Se usa mucho perl
Muy potente pero bastante complejo
-
Francisco Rosales
Diseo 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 invocacinid #..................... Identidad del procesopwd #............. Directorio actual de trabajoenv #..................... Variables de entornocat #....... Informacin en la entrada estndar#.......................................... FIN
Ejemplo: test.cgi
-
Francisco Rosales
Diseo 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 ubicacin:
Debe residir en /cgi-bin del sistema(o de la cuenta del usuario)
Por su extensin: El nombre del fichero debe tener extensin .cgi
Por sus permisos: Ejecucin (y lectura) para todo el mundo
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 10
Cmo invocar un CGI? I Directamente desde el Navegador
Indicando su URL en el campo Location
Al recorrer un hipervnculo Etiqueta A referida al URL
Enlace al CGI de pruebas
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 11
Cmo invocar un CGI? II Como origen de una imagen
La salida del CGI debe ser de tipo imagen Es la forma de incrustar banners
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 12
Cmo invocar un CGI? III Como accin asociada a un formulario
HTML Es el uso ms comn de los CGI El mtodo de invocacin (GET o POST)
establece la manera en que el CGIrecibir los parmetros
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 13
Paso de argumentos NO los reciben de la lnea 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 '?' (No suele aparecer pero) puede usarse para indicar
caminos de bsqueda QUERY_STRING
Texto desde la 1 '?' hasta el final Este texto debe estar codificado
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 14
Codificacin URL Los espacios en blanco se sustituyen por el
carcter '+' Otros caracteres especiales, por su valor
hexadecimal con el prefijo '%'
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 15
Mtodo de invocacin I Todo formulario HTML debe indicar:
La accin asociada: un programa CGI El mtodo de invocacin: GET o POST
Los datos del formulario le llegarn al CGI: Como un conjunto de pares nombre=valor Donde nombre, ser el del atributo NAME de cada
etiqueta INPUT o SELECT del formulario Los pares llegarn uno detrs de otro, separados por
el carcter '&'
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 16
Mtodo de invocacin II REQUEST_METHOD
Esta variable de entorno indicar el mtodo de invocacin empleado
Si fue GET Los datos llegarn (codificados) en la
variable de entorno QUERY_STRING
Si fue POST Llegarn por la entrada estndar La variable de entorno CONTENT_LENGTH indicar el
nmero de bytes de informacin
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 17
Entorno de ejecucin La especificacin define unas variables que
el servidor Web debe poner en el entornode ejecucin de los CGI
Se escriben en maysculas Un valor nulo equivale a su no definicin
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 18
Identificacin del cliente REMOTE_ADDR
Direccin IP del cliente que invoc al CGI REMOTE_HOST
Direccin completa del cliente que invoc al CGI REMOTE_IDENT
Si el sistema cliente permite identificar usuarios, indicar su nombre
No deber ser usado nunca como autenticacin SCRIPT_NAME
URL completo al programa CGI
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 19
Identificacin del servidor SERVER_NAME
Nombre del servidor como se indic en el URL
SERVER_PORT El nmero de puerto del servicio web
SERVER_SOFTWARE Nombre y versin del software que implementa
el servidor
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 20
Sobre la conexin I GATEWAY_INTERFACE
Versin del protocolo CGI implementado
DOCUMENT_ROOT Directorio raz del servicio Web
HTTP_HOST Nombre del servidor
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 21
Sobre la conexin II HTTP_REFERER
URL de la pgina desde la que se accedi al CGI
HTTP_USER_AGENT Identificacin del navegador usado por el cliente
HTTP_COOKIE Cookie del usuario, si es que tiene
HTTPS Activa si el CGI fue invocado a travs de un servidor
seguro
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 22
Parmetros de entrada I PATH_INFO
Camino extra expresado en el URL del CGI
PATH_TRANSLATED Es la concatenacin de DOCUMENT_ROOT y
PATH_INFO
REQUEST_METHOD Mtodo de invocacin utilizado
QUERY_STRING Parmetros pasados a un CGI mediante GET
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 23
Parmetros de entrada II CONTENT_LENGTH
Tamao del la informacin presente en la entrada estndar o NULL
Puede venir de un POST o de un PUT de HTTP
CONTENT_TYPE Indica el tipo MIME de la informacin presente en la
entrada estndar Si vale NULL, se deber deducir el tipo, y si no se
consigue se asumir application/octet-stream
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 24
Qu puede devolver? Todo CGI deber emitir su resultado por la
salida estndar Un documento MIME completo O la localizacin del documento resultante
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 25
Devolucin de un documento 1 linea: Content-Type: tipo MIME 2 lnea: en blanco Resto: documento completo del tipo indicado
text/plain, image/gif, etc.Content-Type: text/html
Ttulo del documento dinmico
....
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 26
Devolucin de una direccin 1 lnea: Location: URL local o remoto 2 lnea: en blanco
URL local: el propio servidor lo seguir
URL remoto: el cliente ha de seguirloLocation: http://www.w3.org/pub/WWW/
Location: /pub/WWW/
-
Francisco Rosales
Diseo 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 conexin HTTP
Debe incluir al menos una lnea indicando el protocolo y el estado del acceso realizadoHTTP/1.0 200 Todo fue bienContent-Type: .......
-
Francisco Rosales
Diseo de Servicios Web Common Gateway Interface 28
Direcciones de inters 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 CGIshttp://users.erols.com/foxdm/cgi.htm
CGI Programming 101http://www.cgi101.com/class/
Common Gateway Interface(Interfaz Pblico de Pasarela)IntroduccinFuncionamiento bsicoEjemploVentajas e InconvenientesPrecauciones de seguridadLenguajes de ProgramacinEjemplo: test.cgiPara que funcione como CGICmo invocar un CGI?ICmo invocar un CGI?IICmo invocar un CGI?IIIPaso de argumentosCodificacin URLMtodo de invocacinIMtodo de invocacinIIEntorno de ejecucinIdentificacin del clienteIdentificacin del servidorSobre la conexinISobre la conexinIIParmetros de entradaIParmetros de entradaIIQu puede devolver?Devolucin de un documentoDevolucin de una direccinCGI con salida NPHDirecciones de inters