CGIBASHOPTS: CGI BASH OPTIONS Analisando
O CGIBASHOPTS é uma biblioteca pequena e rápida do Bash Pure para analisar os parâmetros dos formulários da Web para scripts Bash Shell Web CGI, mesmo com uploads de arquivo binário. É gratuito para uso sem restrições (MIT Licença). (c) Colas Nahaboo 2017
Investir rápido
- Copie o arquivo
cgibashopts em algum lugar do seu servidor. Por exemplo, como /usr/local/bin/cgibashopts - Basta obter esse arquivo no início dos seus scripts CGI Bash. Por exemplo:
source /usr/local/bin/cgibashopts ou . /usr/local/bin/cgibashopts - O valor de um parâmetro de formulário da web
foo (por exemplo, na página html: <input type=text name=foo> ) pode ser encontrado como o valor da variável de ambiente do shell $FORM_foo
Solução de problemas:
- Se algo der errado, execute
tests/tewiba -v no diretório CGIBASHOPTS no seu servidor para ver se o conjunto de testes detecta um problema. - O CGIBASHOPTS requer as versões GNU de
bash , grep , sed . Para testar isso, execute grep -P . /dev/null , você não deve receber um erro. Se o fizer, você deve instalá-los em sistemas semelhantes a Unix, não usando os utilitários GNU por padrão, como MacOS , BusyBox, FreeBSD, BSD e SYSV Derivatives ...- No macOS, veja a edição nº 10
- No BusyBox, você precisa instalar os pacotes para as versões GNU de
bash , coreutils , grep , sed - Em FreeBSD, use o Freshports
Características
- Simples de usar: apenas um arquivo.
- Rápido e pequeno.
- Bash puro, exceto pelo uso de grep, sed e truncado.
- Handles Get and Post Solicitações, com todos os métodos de codificação dos parâmetros: Application/X-Www-Form-Form-Urlencoded, Multipart/Form-Data, Text/Plain.
- Lida também as seqüências de consultas de pesquisa de índice herdado
- Lida com o upload de arquivos binários e arquivos de texto com o Unix ou o DOS Newlines. Não encontrei nenhuma biblioteca existente fornecendo essa funcionalidade para a programação de shell cGI
- Usa apenas recursos "clássicos" do Bash e deve trabalhar com versões antigas da Bash, eu acho que 4.1+
Documentação
- Quando usado, a biblioteca CGIBASHOPTS decodifica os parâmetros enviados pelo navegador que o servidor da Web fornece aos scripts como várias variáveis de ambiente e, opcionalmente, sua entrada padrão, conforme o padrão CGI. O CGIBASHOPTS os disponibiliza para o script, incluindo um formulário fácil de usar: variáveis, funções e arquivos.
- Para usar a biblioteca, adie -a no início do seu script, o mais cedo possível para evitar conflitos com variáveis que você pode usar posteriormente no seu script.
- A biblioteca decodifica os parâmetros das solicitações GET e POST, com todas as maneiras possíveis de codificar os parâmetros (via "Enctype").
- A lista de nomes de parâmetros está listada em
$FORMS como uma sequência de nomes separada por espaço. Por exemplo: echo "$FORMS" ==> foo bar gee . Os nomes dos parâmetros são os especificados pelo atributo name nos vários elementos HTML em um formulário HTML, ou enviados por comandos como wget ou curl . Os nomes dos parâmetros devem ser nomes de variáveis legais para Bash: caracteres alfanuméricos e sublinhados, e não iniciando por um dígito. - Nomes de parâmetros inválidos (por exemplo: 0to60, ab, a: b, ...) são silenciosamente ignorados, bem como seus valores
- Cada valor do parâmetro é copiado como o valor de uma variável de ambiente formulada - prefixada. Por exemplo:
$FORM_foo para um elemento de formulário HTML chamado foo . - Os valores de parâmetros multi-lines são convertidos em extremidade do Unix (uma nova linha em vez de retorno e nova linha de transporte)
- Uploads de arquivos: Quando os arquivos são carregados, através de elementos de formulário como
<input type=file name=file1> , o cgibashopts coloca o nome do parâmetro (aqui file1 ) no variável $ formFiles, que é uma lista de separação espacial de todos os nomes de parâmetros de arquivo recebidos. O nome real do arquivo carregado pode ser encontrado no valor da variável (aqui $FORM_file1 ), enquanto o conteúdo do arquivo pode ser encontrado em um arquivo local nomeado pela variável no diretório $CGIBASHOPTS_DIR (aqui $CGIBASHOPTS_DIR/file1 )- Somente os arquivos carregados são criados e listados dessa maneira. Se o usuário não selecionar nenhum arquivo no formulário, a variável Shell não será definida nem qualquer arquivo criado.
- Arquivos de upload vazios serão criados, no entanto. Eles estarão vazios, é claro.
- Os arquivos binários e de texto recebidos não serão convertidos no formato de texto do UNIX (as linhas terminam com uma nova linha), mesmo que o cliente os enviasse em um formato DOS (as linhas terminam com um retorno de transporte e uma nova linha). Portanto, você deve estar pronto para lidar com linhas de DOS nos arquivos de texto carregados.
- Aviso: uma função de limpeza de bash
cgibashopts_clean deve ser chamada no final do seu script para remover o diretório temporário $CGIBASHOPTS_DIR armazenando os arquivos enviados, se a opção -n (veja abaixo) não for usada. O CGIBASHOPTS faz uma trap cgibashopts_clean 0 para que essa função seja chamada automaticamente no final do seu script, para que você não precise fazer nada, a menos que você use uma trap 0 e, portanto, deve garantir que seu código lidando com o sinal de cgibashopts_clean seja explicitamente explicitamente- O fornecimento de cgibashopts apagará qualquer
trap 0 que foi feita anteriormente. Então, defina sua armadilha 0 após o fornecimento de cgibashopts - Chamar Cgibashopts_clean é realmente necessário apenas se o seu formulário html usar elementos de entrada do
file de tipo - Assim que você processar os arquivos enviados, você pode chamar explicitamente o
cgibashopts_clean FUNCIONE, para que não seja mais necessário e você seja livre para usar armadilhas como desejar depois - Se você não espera ter o upload de arquivos, pode usar a opção -n (veja abaixo)
- Opções da linha de comando:
- -n pode ser dado para ignorar e descartar quaisquer solicitações para fazer upload de arquivos. Isso é recomendado se você não espera que os arquivos sejam carregados, pois pode economizar alguma carga de computação se algum invasor tentar fazer upload de arquivos falsos, mas não obrigatório. Ele também não define a variável
$CGIBASHOPTS_DIR nem a função cgibashopts_clean , e não use a trap. Nota: Isso está disponível apenas nas versões 3 e acima. Exemplo de uso : . cgibashopts -n - -D Diretório especifica onde o CGIBashoptions gerenciará seus arquivos temporários em caso de uploads de arquivo. Padrão para
/tmp . CGIBASHOPTIONS Criará nele um cgibashopts-files.$$ Subdiretório (onde $$ é o número do processo Bash, exclusivo por instância), mostrado na variável $CGIBASHOPTS_DIR .
- A variável
CGIBASHOPTS_RELEASE segura a versão de liberação, usa versão semântica (por exemplo, 4.0.1, 4.4.3) do CGIBASHOPTS Libray usado, versões sendo listadas no final desta página na história das mudanças ...- A variável
CGIBASHOPTS_VERSION segura o número da versão principal (o primeiro número inteiro de CGIBASHOPTS_RELEASE acima, para compatibilidade com versões anteriores.
- GODOS DE MISS:
- São fornecidas duas funções práticas de bash:
-
urldecode que pega uma string no parâmetro e produz sua versão decodificada, transformando + em espaços e %XX no caráter do código ASCII hexadecimal xx (por exemplo, %41 se torna A) e removendo retornos de transporte. -
urlencode que executa a operação reversa. Ambos são mais rápidos que os comandos binários do Linux.
- Duas variáveis
$nl e $cr mantêm uma nova linha e um caractere de retorno de carruagem - Uma maneira alternativa de obter os valores das variáveis é através da função
param . Esta é apenas uma função de conveniência compatível com o Bashlib para pessoas (ou scripts) usadas.-
param sem argumento produz o valor dos FORMS -
param foo produz o valor de FORM_foo -
param foo a string... define o valor de FORM_foo como "a string..." -
param -f impressa $FORMFILES -
param -f foo impressões $FORMFILE_foo -
param -f foo a string... define o valor de FORMFILE_foo como "a string..."
Suíte de teste
É fornecido um conjunto de testes, pode ser executado por ./tests/RUN-ALL-TESTS , para mais detalhes, consulte o readme.md em tests de diretório
Projetos usando isso
- Watermark-pdf Um front-end da web para um script de marca d'água em PDF por Pipoprods
- Pesquise em todos os projetos do Github todos
Opinião
Sinta -se bem -vindo a copiar e aprimorar este projeto, além de fornecer relatórios de bugs, feedback, sugestões via:
- Criando problemas, se você tiver uma conta do GitHub.
- Use o formulário de relatório Git fornecido para criar um problema se você não tiver uma conta Githib.
- Criar ou participar de uma discussão sobre este projeto
- Ou apenas me envie um email: [email protected]
História das mudanças
- 2023-01-11 v4.1.3: Correções para o conjunto de testes apenas para evitar bugs nas versões Bash <4,4. O código real do CGIBASHOPTS é inalterado, não há necessidade de atualizar, a menos que seja aprovada no conjunto de testes em sistemas herdados.
- 2023-01-08 v4.1.2: Correção de erros: Somente os semicolons foram entendidos como separadores nos cabeçalhos HTTP
Content-Type e Content-Disposition . Fixado para usar também vírgulas. Bug relatado por "Florin-CTU", edições #8 e #9. - 2022-11-24 v4.1.1: Correção de bugs: os campos de formulário após um campo de upload de arquivo foram ignorados. Atualize! Relatório de bugs por "piprods", edição nº 7.
- 2021-12-23 v4.1.0:
- Mudou para o versão semântica, com o novo Var
CGIBASHOPTS_RELEASE - nova opção -d para especificar o diretório temporário (sugestão de "Aufschlauer")
- Mova para o Github: moveu a maioria dos arquivos da visão principal, em testes/, Tewiba atualizada para 1.5.0, limpeza de código para passar a verificação
- 2020-04-16 Versão 4: Função de Goodie de Urlencode adicionada
- 2020-04-04 Algumas alterações cosméticas neste documento e nos testes (DIR test-suite renomeado como testes), mas nenhuma alteração no CGIBASHOPTS em si, portanto, nenhum aumento de número de versão.
- 2020-03-27 Versão 3: -n Opção adicionada para desativar os uploads de arquivos
- 2018-10-09 Versão 2: Fix, espaços nos valores dos parâmetros podem ser vistos como +
- 2017-12-13 Versão 1: Correções Para fazer o upload de arquivos com vários tipos MIME, a biblioteca agora pode ser usada em scripts usando set -u e set -e.
- 2017-12-07 Criação do projeto