¿Qué es el formato de archivo CGI?
La extensión .cgi significa Common Gateway Interface - un enfoque estándar para generar aplicaciones web y contenido dinámico en páginas web. La extensión .cgi, cuando se aplica en un servidor web, proporciona una interfaz entre los programas ejecutables y el servidor web que genera el contenido del sitio. Todos estos programas se denominan CGIs o scripts CGI.
Estos archivos se escriben generalmente utilizando un lenguaje de scripting como Perl, Python o shell script, aunque un archivo .cgi puede ser igualmente un binario compilado (por ejemplo, un programa en C). La extensión en sí no dice nada sobre el lenguaje interno; la línea shebang en la parte superior del script, como #!/usr/bin/perl o #!/usr/bin/python3, le indica al servidor web qué intérprete debe invocar.
Un script CGI se ejecuta en el servidor una vez por cada solicitud HTTP entrante. Lee los datos de la solicitud de las variables de entorno (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) y acepta los datos del cuerpo POST a través de stdin, luego escribe una respuesta HTTP -cabeceras seguidas del contenido del cuerpo- directamente en stdout. Para funcionar, el archivo debe colocarse en un directorio habilitado para CGI (tradicionalmente /cgi-bin/) y tener configurado el permiso de ejecución en el servidor.
.cgi es un estándar de interfaz, no un lenguaje de programación. Varios otros formatos de archivo comparten la extensión .cgi: los scripts .pl, .py o .sh a menudo se renombran a .cgi para que el servidor web los dirija a través del mecanismo CGI. Debido a que CGI genera un nuevo proceso para cada solicitud, es lento a gran escala y ha sido reemplazado en gran medida por FastCGI, mod_php, WSGI y servidores de aplicaciones modernos, aunque sigue siendo compatible con la mayoría de los servidores web actuales.
Seguridad y protección
RIESGO: MEDIUMLeer un .cgi en un editor de texto es seguro - no se ejecutará al abrirse. El riesgo reside en la EJECUCIÓN en un servidor: los scripts CGI se ejecutan con los privilegios del servidor e históricamente son una superficie importante de vulnerabilidad web (el error Shellshock de 2014 se explotó en gran medida a través de scripts de shell CGI; los CGIs mal escritos permiten la inyección de comandos, el salto de directorios y la ejecución de código arbitrario). Nunca despliegue un .cgi descargado que no comprenda, mantenga los intérpretes y el servidor actualizados, restrinja los permisos de /cgi-bin/ y prefiera alternativas como FastCGI o servidores de aplicaciones para nuevos trabajos. Trate el código fuente CGI desconocido como código no confiable que debe ser revisado antes de ejecutarse.
Detalles del formato
en pocas palabras- EToys / datos de aplicaciones de nicho usando .cgi - Unas pocas aplicaciones no relacionadas han reutilizado .cgi para sus propios archivos de datos; en un servidor web, un .cgi es casi siempre un script de interfaz.
Programas que abren archivos CGI
Detalles técnicos
especificación profunda| Tipo MIME | application/x-httpd-cgi |
| Tipos MIME alternativos | text/plain, application/octet-stream |
| Codificación de archivo | Texto plano (ASCII/UTF-8) para scripts; binario nativo para ejecutables compilados |
| Firma de archivo | Sin bytes mágicos fijos - los scripts de texto comienzan con una línea shebang (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh, etc.); los binarios CGI compilados llevan la cabecera ejecutable de la plataforma (ELF en Linux, MZ en Windows) |
| Modelo de ejecución | El servidor web bifurca (fork) un nuevo proceso del SO por cada solicitud HTTP para ejecutar el script o binario; el proceso finaliza después de enviar la respuesta |
| Mecanismo de entrada | Datos de la solicitud entregados a través de variables de entorno (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, cabeceras HTTP_*); cuerpo POST pasado vía stdin |
| Mecanismo de salida | El script escribe las cabeceras de respuesta HTTP (líneas Nombre: valor) seguidas de una línea en blanco y el cuerpo de la respuesta directamente en stdout |
| Despliegue requerido | El archivo debe residir en un directorio habilitado para CGI (convencionalmente /cgi-bin/) con el bit de ejecución activado; el usuario del servidor web necesita permisos de lectura y ejecución |
| Lenguajes de scripting típicos | Perl, Python, Bash/shell, Ruby, C (compilado a un binario nativo) |
| Tamaño de archivo típico | 1 KB - 100 KB para scripts de texto; mayor para binarios compilados |
| Compresión | Ninguna dentro del propio archivo; el cuerpo de la respuesta HTTP puede ser comprimido con gzip por separado por el script o el servidor |
| Soporte de plataforma | Linux, Unix, macOS, Windows - cualquier SO que ejecute un servidor web con capacidad CGI |
| Servidores web comunes | Apache HTTP Server, Nginx (vía wrapper FastCGI), lighttpd, Microsoft IIS |
| Característica de rendimiento | Lento a gran escala - cada solicitud genera y destruye un nuevo proceso; superado por FastCGI, WSGI y ASGI para despliegues de alto tráfico |
| Consideración de seguridad | El código fuente del script es legible en el disco; protéjalo con permisos de archivo estrictos y evite exponer el directorio CGI a través de una URL directa fuera de la ruta /cgi-bin/ designada |
| Lanzado | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Última versión | CGI/1.1 (RFC 3875, October 2004) |
| Estándar abierto | Sí · libre de regalías |
| Especificación | www.rfc-editor.org |
Conversiones de CGI
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos CGI.
Preguntas frecuentes
¿Qué es un archivo .cgi?
¿Cómo abro un archivo .cgi?
/cgi-bin/ del servidor, hágalo ejecutable y solicite su URL; los CGIs no se ejecutan haciendo doble clic.¿Por qué mi navegador muestra el código CGI en lugar de ejecutarlo?
/cgi-bin/ y corrija los permisos.