CGI 
Common Gateway Interface

 

1. ¿Qué es CGI?

2. Requisitos para correr programas ó script CGI

3. Mecanismo de Comunicación entre el Programa CGI  y el Servidor

4. Tipo de Comunicación entre el Servidor y el Programa ó Script CGI

5. Seguridad en los programas ó scripts CGI

6. Consideraciones entre CGI y SSI
 
 



 
 
 

1. ¿ Qué es CGI?

      CGI (Common Gateway Interface), Es un método estándar (común) de comunicación (interfaz) entre diferentes procesos
(tipos de gateway). CGI   no es un lenguaje, es un protocolo  estándar mediante el cual, un servidor Web puede obtener
data de (ó enviar data a ) las bases de datos, documentos ó a otros programas y presentar esa misma data a los usuarios
a través de la Web. Un Script ó programa CGI puede ser escrito en cualquier lenguaje que pueda leer STDIN, escribir
en STDOUT y leer Variables de Entorno.

      La estructura ó secuencia típica de un Script ó programa CGI es la siguiente:

a)  Leer la forma de entrada del usuario
b)  Hacer la manipulación de la data necesaria
c)  Escribir la respuesta a STDOUT

      Como podrás ver, esta es la secuencia lógica de cualquier programa en cualquier lenguaje de programación; pero, una
diferencia importante entre un programa común y un Script ó programa de CGI es que los Scripts CGI usualmente generan
una página WEB como respuesta.
      Una de las principales razones (ó podemos decir la razón más importante) por la cual los programadores de páginas Web
usan los Scripts CGI es definitivamente para aumentar el contenido de las páginas Web muy por encima de lo que el
simple HTML puede proveer, Básicamente una página Web  que contenga una forma necesita  un Script CGI para procesar
las entradas  de la forma. El Script CGI es entonces ejecutado en tiempo real, de forma tal  que puede procesar la
información del usuario y genera como salida la información dinámica requerida. Desde formas de correo  y programas que
lleven contadores de visitantes hasta los más complejos programas de base de datos que generan complejos sitios Web al
momento, los Scripts CGI proporcionan un amplio espectro de contenido en la Web Hoy.
      Los CGI Scripts son una herramienta esencial para crear y manejar sitios web dinámicos y comprensibles. Con CGI Scripts
Ud. Puede crear aplicaciones que respondan según las selecciones y/o respuestas de sus usuarios.


2. Requisitos para correr programas ó script CGI

      La mayoría de las Compañías proveedoras de Servicios de Internet (ISP), soportan el uso de Scripts CGI. Una de las
principales cosas que debemos considerar al momento de seleccionar un proveedor de servicios de Internet es lo siguiente:

a) ¿Tengo la capacidad de correr mis propios Scripts CGI?
b)  ¿Mi capacidad de correr Scripts CGI incluye soporte por SSI (Server-Sides Includes (comandos que permiten incluir
     en una página Web información que el Web server tiene ó puede generar) ?

      Si la respuesta a estas dos preguntas es afirmativa, entonces los requisitos que yo debo amarrar para poder correr un
Script de CGI son los siguientes:

a)  Gestionar con el administrador del servidor Web el acceso al directorio CGI-BIN. En este directorio deben resider todos
     tus programas CGI.
b) Transferir los Scripts CGI al directorio CGI-BIN (Hacer la transferencia siempre en modo ASCII ) y otorgarle a los
     mismos los permisos requeridos para que puedan ser ejecutados por cualquier persona que esté ejecutando ésa página Web
    (usualmente estos archivos tienen extensión  * .cgi).
c)  Incluir en las páginas HTML en las cuales tú quieres que se ejecute tu Script CGI, las etiquetas de llamada correspondientes.


3. Mecanismo de Comunicación entre el Programa CGI  y el Servidor:

      CGI es la interfaz "genérica " entre  el servidor  y los programas residentes en el servidor. CGI especifica como la
data  es enviada al programa  y como la data puede ser regresada por el programa a través del servidor y de regreso al
navegador  que originalmente envió la data. El mecanismo básico para hacer esto es el siguiente:

a) Enviando data  al Programa

      CGI especifica  COMO la data es enviada al programa ó Script CGI (ya sea a través de las variables de ambientes ó
como data leída por el programa como entrada estándar) y que  data es enviada (en general , se envía toda la data enviada por
el cliente al servidor, más  variables de ambientes que describen el status del servidor).

b) Regresando Data al Cliente

      Para regresar data al cliente (a través de su navegador) , el programa ó Script CGI sólo escribe la data en la salida
estándar. Esta data es enviada al cliente después de algún procesamiento del servidor  para asegurar que se tiene el correcto
mensaje de encabezado que describa la data y el estado de la transacción. Un punto de atención importante es que el Script
CGI debe escribir a su salida estándar , antes que cualquier información, los mensajes de encabezado que definan  el tipo de
data que se está enviando (esta es la única manera a través de la cual el servidor puede saber el tipode data que se está
regresando) y una línea en blanco que separa los mensajes de encabezado con a data enviada.


4. Tipo de Comunicación entre el Servidor y el Programa ó Script CGI:

     Cada vez que un cliente ejecuta un script CGI a través de una línea de Comando URL, el servidor ejecuta el script en tiempo
real. La salida del programa irá directamente al cliente, pero es imposible enviar opciones y/o argumentos a través de la línea de comando al Script CGI. Para poder establecer este tipo de comunicación el programa CGI usa lo siguiente:

Variables de Ambiente: La mayor parte de la información que necesita un Script CGI está disponible a través de las variables
de ambientes. Los servidores ocasionalmente pueden variar en la lista de los nombres de variables de ambientes que ellos asignan,
por lo que debemos chequear  la documentación del servidor para conocer los nombres de las variables de ambiente disponibles.
Entre la lista de las más comunes tenemos:
 

AUTH_TYPE El método de autenticación usado para validar un usuario
CONTENT_LENGTH La longitud de la data de consulta pasada al CGI a través del estándar input
CONTENT_TYPE El tipo de data enviado a través de la consulta i.e text/html
DOCUMENT_ROOT  El directorio desde el cual  los documentos web son tomados
HTTP_ACCEPT  Una lista de los tipo de data que el cliente puede aceptar
HTTP_FROM La dirección de correo del usuario que está haciendo la consulta
HTTP_REFERRER EL URL del documento que el cliente acesó antes de acezar el Script CGI
HTTP_USER_AGENT  El navegador que el cliente está usando para hacer la petición
PATH_INFO  Información de caminos adicionales pasados al Script CGI
QUERY_STRING La información de consulta que se le pasa al programa. Se le añade al URL después del signo de interrogación (?).
REMOTE_ADDRESS  La dirección IP remota desde la cual el usuario está haciendo el requerimiento
REMOTE_HOST  El nombre remoto del servidor  desde el cual el usuario está haciendo el requerimiento
REMOTE_IDENT  El usuario que está haciendo el requerimiento
REMOTE_USER  El nombre autentificado del usuario haciendo el  requerimiento
REQUEST_METHOD  El método mediante el cual la información requerida es solicitada ( i.e GET, POST,HEAD)
SCRIPT_NAME  El camino virtual del Script que se está ejecutando 
SERVER_NAME  El nombre ó dirección IP del Servidor
SERVER_SOFTWARE  El nombre y la versión del software que está respondiendo los requerimientos del cliente


5. Seguridad en los Scripts CGI:

      Como el Script CGI es un programa, entonces básicamente Ud. Está dejando  al mundo correr un programa en su sistema,
lo cual no es lo mas seguro de hacer. Los Scripts de CGI pueden presentar brechas de inseguridad en dos sentidos:

1. Ellos pueden intencionalmente ó no  dejar escapar información sobre tu servidor  que pueda ayudar a los hackers  a atacar
   el mismo
2. Los Scripts CGI que procesan entrada de usuarios remoto,  tales como el contenido de una forma  ó un comando de busqueda  indexada, puden ser vulnerables a ataques  en los cuales  el usuario enfaña estas entradas para lograr que ejecute comandos.

      Por estas dos importantes razones, es necesario  tomar algunas precauciones de seguridad que necesitan ser implementadas
cuando se usan Script CGI. Entre ellas están:

a) Es mejor guardar los scripts CGI en el directorio cgi-bin para poder tener un mejor conocimiento de cuales Scripts CGI
    son mantenidos en cada servidor en lugar de tenerlos diseminados por varios directorios del mismo. Adicionalmente , el
    directorio cgi-bin usualmente  tienen controles de seguridad muy cerrados  lo cual evita la posibilidad de que algun hacker
    pueda colocar un archivo *.cgi en tu servidor y después ejecutarlo a través de un URL

b) Los códigos compilados son más seguros que los Scripts interpretados ya que no se tiene acceso tan rápido a la lógica del
    programa y es menos vulnerable a ser atacado.

c) Antes de instalar un Script CGI que encontrastes en la WEB , examinalo muy bien primero para evitar daños no deseados
   a tu sistema.

d) Evita en tus scripts CGI dar mucha información acerca de tu sitio  y to servidor.

e) Si estás usando lenguage compilado como C, evita asumir el tamaño de la entrada estándar del usuario.

f) Nunca pases entradas remotas de los usuarios que no han sido chequedas hacia una linea de comando.

g) Invoca tus programas usando su camino completo y evita usar la variable de ambiente PATH para poder acceder a ellos.

h) Siempre, cuando te sea posible, usa los CGI WRAPPERS. Estos scripts encapsuladores  pueden proporcionar  ciertos
    chequeos de seguridad en el Script CGI, tales como  cambiar el dueño del proceso que ejecuta el Script CGI ó  usar algún
    mecanismo de unix para  colocar el Scrpt CGI en  un área restringida del sistema de archivos del servidor.
 


6. Consideraciones entre CGI y SSI

CGI y SSI (Server-Sides Includes) son generalmente intercambiables y por lo general es más un asunto de preferencia
personal el usar uno en lugar del otro. Sin embargo, existen algunas diferencias y guías que siempre es bueno acotar y que
pueden servir para ayudar en la selección de uno sobre el otro:

a) CGI es un estándar común que ha sido aceptado y está soportado por la gran mayoría de HTTPDs. SSI no es un estándar
   común, pero una innovación de NCSA's HTTPD, la cual ha sido adoptada en servidores posteriores. CGI tiene altamente
   portableis entre plataformas,,,, en caso de que este sea un punto a considerar..

b) Si su requerimeinto es suficientemente simple que puede ser elaborado usando SSI sin necesidad de invocar un comando
     exec desde la página HTML, entonces es muy probable que SSI sea más eficiente.

c) Para aplicaciones más complejas donde necesitas ejecutar un programa en cualquiera de los casos, CGI es generalmente la
    mejor selección.

d) Si tu transacción retorna una respuesta que no es una página de HTML, entonces SSI no es una opción viable en absoluto.

Actualmente existen muchas variantes de SSI disponibles, probablemente la mejor conocida sea PHP, la cual te permite
encapsular script del servidor en una página previa de HTML, y por supuesto ASP que es la versión de Microsoft para una
interfaz similar...


  [  Principal  ]    [  Infografia  ]   [  Regresar  ]
Hosted by www.Geocities.ws

1