Vulnerabilidade função mail
De TeHospedia
Existe uma característica da função mail() do PHP que é também uma vulnerabilidade. O terceiro parâmetro da função é o parâmetro usado para acrescentar header no email.
Para acrescentar mais do que um header, se utiliza uma quebra de linha. E é esse o problema. Através de um formulário é possível acrescentar uma quebra de linha e inserir novos headers. Pelo navegador, dadas as características do campo <input type="text"> isso nem sempre é possível, porém um usuário avançado pode utilizar outras técnicas para acrescentar quebra de linhas e injetar headers.
Na prática o que ocorre é o uso de formulários para enviar email para outros destinatários.
Todos os usuários de nossos servidores devem usar o código abaixo para impedir o uso de seus formulários para fins não autorizados.
Basta validar com a função checkheader() abaixo, todas variáveis que são usadas na formação do terceiro parâmetro da função mail().
<?php
/** validacao de header da funcao mail() - Por TeHospedo.com.br
* se houver quebra de linha no parametro passado, o script
* encerra
*/
function checkheader($t) {
$t = urldecode($t);
if (eregi("\r", $t) || eregi("\n", $t)) die("Erro fatal.");
}
// validando a informacao fornecida pelo usuario do site no campo email
checkheader($_REQUEST['email']);
// validando a informacao fornecida pelo usuario do site no campo nome
checkheader($_REQUEST['nome']);
// construindo o header FROM com o informado no email e nome do formulario
$from = sprintf('From: "%s" <%s>', $_REQUEST['nome'], $_REQUEST['email']);
// qualquer variavel fornecida pelo usuario que chegue ate o terceiro parâmetro
// da função mail() deve ser verificada com o checkheader()
mail('usuario@dominio.com.br', 'Teste', $from);
?>



