CGI

INTRODUCCIÓN

Modo de trabajo de los CGI

¿Puedo tener mis propios CGI?

Permisos de ejecución

Escritura en el servidor

Dónde está el riesgo

Lenguajes

 

INTRODUCCIÓN  


El CGI (Common Gateway Interface) es un estándar para comunicar aplicaciones externas con los servidores de información, tales como servidores HTTP o Web. Un documento en HTML que el daemon del Web se trae es estático, es decir, se mantiene constante: un fichero de texto que no cambia. Un programa CGI, por otro lado es ejecutado en tiempo real, así que puede generar información dinámica.

CGI no es un lenguaje. Es simplemente un protocolo que puede ser usado para comunicarse entre formas Web y tu programa. Un script CGI puede ser escrito en cualquier lenguaje que pueda leer de STDIN, escribir en STDOUT, y leer variables de entorno como virtualmente cualquier lenguaje de programación, incluyendo C, Perl, o incluso scripts de shell.

El propósito de los CGI´s es proveer "inteligencia" e interactividad a un sitio web, por ejemplo encontrar un sitio en Yahoo utilizando solo los links que se proveen puede ser una labor frustrante, sin embargo usar el formulario y solicitar una búsqueda personalizada suele frustrarnos (un poco) menos, ya que un CGI nos provee de una respuesta hecha a la medida (eso dice la teoría) de nuestra consulta.

Los scripts CGI pueden generar documentos HTML cuyo contenido varíe dependiendo de los argumentos que se le pasen o de determinadas condiciones. De esta forma podemos hacer accesos a bases de datos, realizar compras, etc.

Al diseñar un CGI hay que crear la parte que el usuario ve, el programa y el resultado que se le presenta al usuario.

En general, es necesaria la presencia de dos elementos, una página Web en formato HTML con un formulario donde el usuario introduce sus datos, y un programa CGI en el servidor, que recibe y procesa los datos del usuario.

[Inicio]

Modo de trabajo de los CGI 


1.      El browser llama a una URL que es un CGI.

2.      El servidor recibe la petición, detecta que la URL es un CGI y ejecuta el script.

  1. El script realiza unas acciones (las que se le han programado).
  2. El script formatea los resultados de forma que el browser pueda interpretarlos.
  3. El usuario ve el resultado en el browser.

ü      Los scripts deben tener permisos de ejecución para el usuario definido por el servidor web.

ü      Pueden ser agujeros de seguridad en el sistema.

ü      Pueden estar realizados en cualquier lenguaje, interpretado o binario.

            [Inicio]

¿Puedo tener mis propios CGI?


Sí, siempre que se cumpla:

  1. Deben estar en un directorio cgi-bin de su web. Este directorio ha de tener permisos de ejecución. Un CGI en un directorio sin permisos de ejecución no funcionará. Por ello deberá solicitar a soporte@adso.net que le asigne este permiso de ejecución al directorio.
  2. Deben estar compilados para Windows NT sobre plataformas Intel o bien estar escritos en Perl para Win 32 (versión de Active State).

Tenga en cuenta que el funcionamiento de sus propios CGIs es cuestión suya y no está incluido en el soporte técnico de los servidores.

            [Inicio]

Permisos de ejecución


Los CGI no pueden ser colocados en cualquier directorio y esperar que funcionen. Un CGI ha de estar en un directorio que tenga permisos de ejecución de scripts, si se trata de un script en Perl, o de ejecución de archivos exe (que incluye scripts) si se trata de un ejecutable.

El directorio cgi-bin al crearse y notificar la intención de uso de cgi a soporte@adso.net se le dispone de permisos de ejecución y se eliminan los permisos de lectura y listado para proteger mejor los fuentes. Normalmente colocará ahí sus propios CGI.

[Inicio]

Escritura en el servidor


Si estos CGI han de escribir en algún fichero este ha de tener permisos de escritura. Por ello deberá solicitar a soporte@adso.net que le asigne este permiso de escritura en los directorios que desee.

Por motivos de seguridad no es aconsejable que el directorio cgi-bin tenga permiso de escritura por lo que no debe crear CGI que escriban en el. Dirija sus escrituras contra un directorio de datos fuera de cgi-bin.

De todas formas, hay CGI disponibles freeware en Internet que escriben en archivos que se encuentran en el mismo directorio del Script. Esta es una práctica poco recomendable. Para que estos CGI funcionen es necesario que al directorio en el que se encuentran se le asignen permisos de ejecución y de escritura simultáneamente. Y esto constituye un importante agujero de seguridad para su sitio web.

[Inicio]

Dónde está el riesgo


Cuando los usuarios envían un formulario o invocan un CGI de alguna otra forma, en definitiva se les está permitiendo ejecutar remotamente un programa en el servidor. Es más, puesto que la mayoría de CGI's aceptan datos de la entrada de usuario (bien después de rellenar un formulario o directamente desde la línea de URL), en esencia se les brinda a los usuarios la oportunidad de controlar cómo se ejecutará el CGI, de manera que podrían intentar la introducción de una serie de parámetros inesperados hábilmente manipulados para que el CGI funcionase maliciosamente.

Especificaciones

Como un programa CGI es un ejecutable, es equivalente a dejar a el mundo ejecutar un programa en tu sistema, que no es lo mas seguro a hacer. Por ello existen una serie de precauciones de seguridad que son necesarias de implementar cuando se usan programas CGI. Probablemente la que afectará al usuario típico del Web, es que hecho de que los programas CGI necesitan residir en un directorio especial, así el servidor sabe que tiene que ejecutarlo, en vez de simplemente mostrarlo por pantalla. Este directorio está generalmente bajo el control del webmaster, prohibiendo al usuario medio crear programas CGI. Hay otros métodos para permitir el accesos a scripts CGI, pero depende del webmaster que se te de esta posibilidad. Así que deberás contactar con tu webmaster para consultar la factibilidad de permitirte un acceso a los CGI.

                                                                                                                                 [Inicio]

Lenguajes


Aunque un CGI se puede programar en cualquier lenguaje soportado por el sistema operativo del servidor, usaremos el lenguaje C para nuestros ejemplos (excepcionalmente se tocarán algunos otros lenguajes).
Esto es porque un ejemplo en C podrá ser fácilmente portado a casi cualquier sistema operativo.

Si escribes CGIs para IIS (Windows NT), debes asegurarte de compilarlos en modo 32 bits, de otro modo no funcionarán.
Además no es una buena idea usar programas .exe sino más bien usar DLLs Dynamic Link Libraries que corren mucho más rápido.
Para mayor información revisa este breve apéndice sobre NT.

Otro lenguaje popular para escribir CGI´s es el Perl, el cual es interpretado y al igual que el C es altamente portable entre sistemas operativos.

Los ejemplos de código los haré lo mas claros posibles, por ejemplo en vez de usar un código como

  int main(){
    FILE *fp;
    if ( (fp = fopen("algo.dat","rb"))==NULL ) exit(1) else algo();
    return(0);
  }  

preferiré uno algo más largo pero también más claro como:.

  int main(){
    FILE *fp;
    fp  = fopen("algo.dat","rb");
    if( fp == NULL )
    {
      exit(1);
    }else{
      algo();
    }
    return ( 0 );
  }


 

Elaborado por : Nora Natera

email: naterany@yahoo.es

Última Actualización: 31/10/03

[Principal] 

[Portada]

[Infografía]

[Trabajos]

[Inicio]