O que é o formato de ficheiro CGI?
A extensão .cgi significa Common Gateway Interface - uma abordagem padrão para gerar aplicações web e conteúdo dinâmico em páginas da web. A extensão .cgi, quando aplicada em um servidor web, fornece uma interface entre programas executáveis e o servidor web que gera o conteúdo do site. Todos esses programas são chamados de CGIs ou scripts CGI.
Esses arquivos são geralmente escritos usando uma linguagem de script como Perl, Python ou shell script, embora um arquivo .cgi possa igualmente ser um binário compilado (por exemplo, um programa em C). A extensão em si não diz nada sobre a linguagem interna - a linha shebang no topo do script, como #!/usr/bin/perl ou #!/usr/bin/python3, informa ao servidor web qual intérprete invocar.
Um script CGI roda no servidor uma vez por cada requisição HTTP recebida. Ele lê os dados da requisição a partir de variáveis de ambiente (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE) e aceita dados do corpo POST via stdin, então escreve uma resposta HTTP - cabeçalhos seguidos pelo conteúdo do corpo - diretamente para stdout. Para funcionar, o arquivo deve ser colocado em um diretório habilitado para CGI (tradicionalmente /cgi-bin/) e ter a permissão de execução definida no servidor.
.cgi é um padrão de interface, não uma linguagem de programação. Vários outros formatos de arquivo compartilham a extensão .cgi: scripts .pl, .py ou .sh são frequentemente renomeados para .cgi para que o servidor web os encaminhe através do mecanismo CGI. Como o CGI gera um novo processo para cada requisição, ele é lento em escala e foi amplamente substituído por FastCGI, mod_php, WSGI e servidores de aplicação modernos - embora continue sendo suportado na maioria dos servidores web hoje.
Segurança e proteção
RISCO: MEDIUMLer um .cgi em um editor de texto é seguro - ele não será executado ao ser aberto. O risco está na EXECUÇÃO em um servidor: scripts CGI rodam com os privilégios do servidor e historicamente são uma grande superfície de vulnerabilidade web (o bug Shellshock de 2014 foi explorado amplamente através de scripts shell CGI; CGIs mal escritos permitem injeção de comando, travessia de diretório e execução de código arbitrário). Nunca implante um .cgi baixado que você não entenda, mantenha os intérpretes e o servidor atualizados, restrinja as permissões do /cgi-bin/ e prefira alternativas como FastCGI/servidores de aplicação para novos trabalhos. Trate códigos CGI desconhecidos como código não confiável a ser revisado antes de rodar.
Detalhes do formato
em resumo- EToys / dados de apps específicos usando .cgi - Algumas aplicações não relacionadas reutilizaram .cgi para seus próprios arquivos de dados; em um servidor web, um .cgi é quase sempre um script de interface.
Programas que abrem arquivos CGI
Detalhes técnicos
especificação profunda| Tipo MIME | application/x-httpd-cgi |
| Tipos MIME alternativos | text/plain, application/octet-stream |
| Codificação de arquivo | Texto simples (ASCII/UTF-8) para scripts; binário nativo para executáveis compilados |
| Assinatura de arquivo | Sem bytes mágicos fixos - scripts de texto começam com uma linha shebang (#!/usr/bin/perl, #!/usr/bin/python3, #!/bin/sh, etc.); binários CGI compilados carregam o cabeçalho executável da plataforma (ELF no Linux, MZ no Windows) |
| Modelo de execução | O servidor web cria um novo processo do SO por requisição HTTP para rodar o script ou binário; o processo encerra após a resposta ser enviada |
| Mecanismo de entrada | Dados da requisição entregues via variáveis de ambiente (QUERY_STRING, REQUEST_METHOD, CONTENT_TYPE, cabeçalhos HTTP_*); corpo POST passado via stdin |
| Mecanismo de saída | O script escreve cabeçalhos de resposta HTTP (linhas Nome: valor) seguidos por uma linha em branco e o corpo da resposta diretamente para stdout |
| Implantação necessária | O arquivo deve residir em um diretório habilitado para CGI (convencionalmente /cgi-bin/) com o bit de execução definido; o usuário do servidor web precisa de permissão de leitura e execução |
| Linguagens de script típicas | Perl, Python, Bash/shell, Ruby, C (compilado para um binário nativo) |
| Tamanho de arquivo típico | 1 KB - 100 KB para scripts de texto; maior para binários compilados |
| Compressão | Nenhuma dentro do próprio arquivo; o corpo da resposta HTTP pode ser compactado com gzip separadamente pelo script ou servidor |
| Suporte de plataforma | Linux, Unix, macOS, Windows - qualquer SO rodando um servidor web compatível com CGI |
| Servidores web comuns | Apache HTTP Server, Nginx (via wrapper FastCGI), lighttpd, Microsoft IIS |
| Característica de desempenho | Lento em escala - cada requisição gera e destrói um novo processo; substituído por FastCGI, WSGI e ASGI para implantações de alto tráfego |
| Consideração de segurança | O código-fonte do script é legível no disco; proteja com permissões de arquivo rigorosas e evite expor o diretório CGI via uma URL direta fora do caminho /cgi-bin/ designado |
| Lançado | 1993 (NCSA HTTPd); formalized as CGI/1.1 in RFC 3875 (2004) |
| Versão mais recente | CGI/1.1 (RFC 3875, October 2004) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | www.rfc-editor.org |
Conversões de CGI
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos CGI.
Perguntas frequentes
O que é um arquivo .cgi?
Como eu abro um arquivo .cgi?
/cgi-bin/ do servidor, torne-o executável e solicite sua URL; CGIs não rodam ao clicar duas vezes.Por que meu navegador mostra o código CGI em vez de executá-lo?
/cgi-bin/ e corrija as permissões.