cgi.pdf

28
© 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]>

Upload: garfiolp

Post on 16-Dec-2015

5 views

Category:

Documents


0 download

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