Usando o comando unix 'mail' do CGI - perigoso?

1

Estou adicionando um formulário de feedback a uma página da web e gostaria de saber se é seguro simplesmente filtrar o conteúdo do elemento TEXTAREA (após a decodificação) através do comando 'mail' para enviar um e-mail para a página. mantenedor.

Eu olhei para a página do manual e não consigo ver uma maneira de abusar disso, especialmente desde que o 'mail' não seja executado no modo interativo, o tilde escapes seja desativado e '.' em uma linha por si só não encerra o corpo da mensagem.

Mas há algum outro perigo que eu deva estar ciente?

O comando é parecido com:

echo "$MESSAGE_BODY" | mail [email protected] -s 'Website feedback'
    
por finnw 31.05.2009 / 02:52

6 respostas

0

Não use email, que deve ser um programa de usuário final orientado a linha. Use o comando "sendmail" (mas não use aquele pedaço amaldiçoado de shblip que é o programa sendmail) incluído na maioria dos MTAs. Ele é destinado a ser usado de forma programática. Eu sei que o postfix e o qmail, por exemplo, o incluem.

cat mailmessage.txt | sendmail -ffrom@yourhost recipient@theirhost

Adendo: não é necessariamente "perigoso" chamar um programa de um CGI, contanto que você saiba o que está fazendo. Em particular, assim como neste caso, certifique-se de que o programa que você está chamando não seja destinado a usuários finais ou não seja chamado no modo interativo (a maioria desses programas permitirá a criação de um shell!)

    
por 31.05.2009 / 12:11
2

Sim, é perigoso. A mensagem de correio pode conter linhas que começam com um caractere ~ til que são tratadas como seqüências de escape pelo programa de correio. Isso inclui escapes de shell e adição de novos destinatários. (mmmm, spam!)

Basta dar uma olhada em

$ man mail

Para ver o que quero dizer.

    
por 31.05.2009 / 03:03
1

É ótimo que você esteja perguntando isso - muitas pessoas só querem fazer o trabalho, e assim introduzir um monte de vulnerabilidades nas bases que "Ahhh ... Vai ficar bem".

Tendo dito isso, acho que é bom fazer o que você está fazendo - mas contanto que você use um filtro - e não um filtro que você mesmo escreveu, mas um que seja de código aberto (portanto, aberto ao escrutínio público). ), maduro (já existe há algum tempo). Eu também me certificaria de que o filtro exclua qualquer tag HTML e conteúdo que possa estar aninhando alguns ataques XSS desagradáveis.

Use uma biblioteca de código aberto onde você pode encontrar um é basicamente o que eu estou recebendo. (Nunca use qualquer aplicativos de segurança fechados - todos estão fadados ao fracasso - e posso assinar meu nome nesse comentário).

    
por 31.05.2009 / 04:03
0

Eu tentaria evitar chamar qualquer comando de um CGI. Tenho certeza de que qualquer idioma que você esteja usando deve ter uma biblioteca para enviar e-mails.

    
por 31.05.2009 / 03:02
0

É uma enorme falha de segurança. Aqui está um recurso para escrever código CGI seguro.

Só para ter uma ideia, aqui está uma lista de caracteres com usos especiais que você precisa conhecer:

Character Name   Character   Problems
backslash        \   quoting
double quote     "   quoting
single quote     '   quoting
dollar sign      $   variable substitution
ampersand        &   command separator
greater than     >   I/O redirection
less than        <   I/O redirection
asterisk         *   file globbing
question mark    ?   file globbing
left bracket     [   file globbing
right bracket    ]   file globbing
left paren       (   word separator
right paren      )   word separator
pipe             |   command separator
backtick         '   subcommand execution
semicolon        ;   command separator
pound sign       #   comment character (sh only)
caret            ^   command separator (sh only)
exclamation      !   history execution (csh only)
tilde            ~   username expansion (csh only)
carriage return  <ascii 13>   command separator
line feed        <ascii 10>   command separator
space            word separator
tab              ascii 9   word separator
NULL             ascii 0   truncates input

Use uma biblioteca onde alguém que outra pessoa já implementou e depurou. Formulários de e-mail foram feitos antes, não reinvente a roda!

    
por 31.05.2009 / 03:08
0

Que tipo de CGI você usa? A maioria das linguagens / frameworks cgi tem suporte para envio de e-mails. Eles são sempre melhores que chamar comandos externos. Bem, o mail () do PHP é muito ruim, mas ainda melhor que chamar comandos externos.

Da perspectiva de segurança, é recomendável enviar e-mails com SMTP (por exemplo, para localhost).

    
por 31.05.2009 / 11:52