É crescente a utilização do método de envio de e-mails em massa através de formulários web que utilizam PHP para envio de e-mails com o objetivo de envio de spam, em alguns casos, e o anonimato das mensagens enviadas em outros casos. Isso aproveita a maneira como a função mail() do PHP funciona e é conhecido como "Headers Mail Injection". Consiste em aproveitar formulários de sites que utilizam a função mail() do PHP para enviar os dados inseridos pelo visitante e que também não validam os dados corretamente para evitar esse tipo de abuso.
Como funciona essa modalidade?
Para explicar vamos nos basear em um exemplo simples, suponha que nosso site possua um campo para o visitante inserir o email da seguinte forma:
<input name="email" type="text" value="Digite seu e-mail aqui" />
Então, o endereço informado neste campo é enviado ao servidor e é levado pelo script PHP para ser utilizado como FROM na função mail() e desta forma a mensagem que chegar ao nosso e-mail terá como remetente o endereço informado pelo Visitante. Agora, a função mail() do PHP
mail(destinatário, assunto, mensagem, cabeçalhos extras);
Ele simplesmente concatena os parâmetros que são passados para ele, portanto se inserirmos o seguinte no campo email do formulário:
"[email protected]%0ACc:[email protected]%0ABcc:[email protected],[email protected]"
onde o primeiro endereço será FROM: (endereço de origem que chegará às vítimas do spam), %0A é o valor hexadecimal do caractere de alimentação de linha <LF>, Cc: (Cópias) contém o endereço ou endereços das vítimas e Cco : (Cópias ocultas) também contém endereços de vítimas de spam.
Parte do cabeçalho do e-mail gerado pelo nosso formulário abusado será:
Para: destinatá[email protected]
Assunto: Assunto da mensagem
De: [email protected]
Cc: [email protected]
Cco: [email protected], [email protected]
Com isso, o spammer terá utilizado nosso formulário para enviar correspondências em massa através de nosso formulário.
O exemplo visto é o caso mais básico desta modalidade, pois através da injeção de cabeçalhos você pode até modificar o assunto e até a própria mensagem a ponto de poder enviar mensagens com conteúdo html.
Que consequências tem esta modalidade?
Em primeiro lugar, o nosso formulário está a ser utilizado para realizar um ato do qual a grande maioria de nós discorda, está também a utilizar a largura de banda disponível no servidor, afetando os restantes sites nele alojados, portanto, o site em questão irá. ser suspensa até que o problema seja resolvido finalmente, em caso de reclamação de spam, a referida conta deverá ser suspensa de acordo com o disposto nas disposições legais do nosso site. É responsabilidade de cada usuário utilizar código suficientemente seguro em seu site e corrigi-lo se necessário.
Como evitar o uso do nosso formulário?
Primeiramente, vale esclarecer que esta modalidade ocorre apenas em formulários que utilizam a função mail() do PHP para processar e enviar os dados inseridos pelo visitante.
Caso utilize um script PHP não criado por você, como o formailphp, atualize-o com a versão mais recente, garantindo que ele forneça uma solução para este tipo de atividade.
Se você usa um script PHP criado por você ou tem conhecimento para editá-lo, incorporamos aqui uma função que você pode usar para validar os dados inseridos de forma eficiente.
<?php
function ValidarDados($campo){
//Array com os possíveis cabeçalhos a serem usados por um spammer
$badHeads = array("Tipo de conteúdo:",
"Versão MIME:",
"Codificação de transferência de conteúdo:",
"caminho de retorno:",
"Assunto:",
"Desde:",
"Envelope para:",
"Para:",
"coco:",
"DC:");
//Verificamos se os dados não incluem nenhum dos
//as strings do array. Se alguma string for encontrada
//direciona para uma página Proibida
foreach($badHeads as $valor){
if(strpos(strtolower($field), strtolower($value)) !== false){
header("HTTP/1.0 403 Proibido");
saída;
}
}
}
//Exemplo de chamadas de função
ValidateData($_POST['e-mail']);
ValidateData($_POST['assunto']);
ValidateData($_POST['mensagem']);
?>
Esta função é básica e pode ser modificada de acordo com o script que você utiliza para processar o formulário e até incorporar controle de erros.
Não se esqueça de incluir campos de formulário ocultos se esses dados forem passados pela função mail().
Esperamos que esta informação
n ser úteis e prestativos para que juntos possamos minimizar o impacto causado por este tipo de atos e fazer uso eficiente do serviço.
Para qualquer dúvida adicional, entre em contato com o suporte.