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.
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.
ü
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.
¿Puedo tener mis propios
CGI?
Sí, siempre que se cumpla:
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.
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.
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.
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.
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. |
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