php mail prevenção de injeção de cabeçalho
-
19-09-2019 - |
Pergunta
Na página manual do php para a função de correio, houve um comentário de usuário dizendo "ter o cuidado de evitar a injeção de cabeçalho".
Na minha aplicação, eu uso a função de e-mail, ea única entrada do usuário eu uso como um parâmetro para a função é o endereço de e-mail.
I fazer uma verificação preliminar do endereço de e-mail usando o ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$
regex.
Será que isso também prevenir contra injeção de cabeçalho?
Obrigado,
JRH
Solução
Alguém gostaria de injetar algo como isto:
user_address@domain.com
CC: spam_address1@domain.com, spam_address2@domain.com, spam_address3@domain.com
Você não permitem \ r \ n que é necessário para a definição de novas informações de cabeçalho. Portanto, sua aplicação é segura.
Outras dicas
Header injeção é um risco apenas se você colocar o material fornecido pelo usuário dentro dos cabeçalhos de mensagens. Um exemplo típico está usando o endereço de e-mail postado para definir o cabeçalho Reply-To.
Isto é o que eu uso:
$email = preg_replace(array("/\r/i","/\n/i", "/%0a/i", "/%0d/i", "/Content-Type:/i", "/bcc:/i", "/to:/i", "/cc:/i", "/Content\-Transfer\-Encoding\:/i", "/Mime\-Version\:/i" ), "", $email);