Насколько безопасна HTML-форма, управляемая PHP, с помощью Swiftmailer? - PullRequest
7 голосов
/ 06 июля 2011

У меня есть HTML-контактная форма на моем сайте. В настоящее время я использую функцию PHP mail () . Из-за этого мне приходится много проверять пользовательский ввод, чтобы избежать атак по внедрению заголовков электронной почты . Я думаю, что я в безопасности, но я, наверное, что-то забыл, и я хочу перейти к надежной библиотеке электронной почты PHP. Библиотека, которую я выбрал: Swiftmailer .

Теперь я хочу проверить, адрес Swiftmailer следующий:

  1. Удаляет или экранирует символы < и > в именах отправителей.
  2. Удаляет символы новой строки (\n, \r\n ...) из имен отправителей.
  3. Удаляет или экранирует новые строки из темы письма.
  4. Нормализация новых строк в теле сообщения (содержание письма). Согласно документам PHP, \n должен использоваться в контенте и \r\n в качестве разделителя заголовков электронной почты.

PS: Я пытался связаться с командой Swiftmailer с моими вопросами безуспешно, поэтому я пытаюсь здесь.

Edit:

Я провел несколько тестовых случаев со Swiftmailer, и вот что я нашел до сих пор:

  1. Если в имени отправителя указано < или >, вы получите сообщение об ошибке Undeliverable по электронной почте. Это может несколько привести к DOS-атаке вашего почтового сервера (возможно, я ошибаюсь). Это нормально?!
  2. Символы новой строки экранированы, поэтому атака с помощью инъекций не удалась.
  3. Символы новой строки экранированы, поэтому атака с помощью инъекций завершается неудачей.
  4. Протестировано, но я не могу увидеть, что делает Swiftmailer (если он что-то делает). Так что я все еще в неведении.

Может кто-нибудь уточнить для меня № 1 и № 4? Я не уверен, что это нормальное поведение ...

1 Ответ

1 голос
/ 07 июля 2011

РЕДАКТИРОВАТЬ: Этот ответ может быть устаревшим.В то время, когда я писал это, были некоторые проблемы с библиотекой SwiftMailer.На данный момент все отлично работает с SwiftMailer и считается лучшей библиотекой с гораздо большим предложением, чем PHPMailer.

Я бы предложил вам использовать phpmailer.Это одна из самых стабильных почтовых библиотек, которые я когда-либо использовал.Вот пример кода, который должен работать:

include("./phpmailer/class.phpmailer.php");
$mail = new PHPMailer(false); // the true param means it will throw exceptions on errors, which we need to catch
$mail->IsSMTP();
$mail->Host = "YourDomainName.com";
$mail->SMTPDebug = 2;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Host = "YourSMTPMailServer.com";
$mail->Port = 587;
$mail->Username = "your-auth-user@yoursmtpmailsercer.com";
$mail->Password = "password"; // GMAIL password
$mail->AddAddress("sendToThis@email.com", '<< >> ! " Receiver Name');
$mail->SetFrom('sendFROMthis@email.com', '<< >> ! " Sender Name');
$mail->Subject = "A testing subject";
$mail->AltBody = 'To view the message, please use an HTML compatible email viewer!';
$mail->MsgHTML('This is my <b>html</b> testing email, sent '.time());
$mail->Send();

Вам необходимо настроить его так, чтобы он подключался к вашему почтовому серверу, но он должен работать.Phpmailer ускользает от всего, что я пробовал.Единственное, что я проверяю, это "sendToThis@email.com".Я делаю это с помощью этого кода:

$email = "sendToThis@email.com";
$email = filter_var(filter_var($email,FILTER_SANITIZE_EMAIL),FILTER_VALIDATE_EMAIL);

if($email){
    echo "This email is valid!";
} else {
    echo "This email is INVALID!";
}

Надеюсь, это поможет:)

...