Как предотвратить email инъекцию в PHP формах

В настоящее время на многих сайтах уже нет адресов электронной почты администраторов, вместо этого используется форма контактов или обратной связи. Вместо того, чтобы собирать адреса электронной почты с веб-сайтов, спамеры обратились к использованию сценариев форм обратной связи для рассылки спама. Если вы пишете собственный сценарий для формы обратной связи, очень важно написать его таким образом, чтобы предотвратить использование сценария для рассылки спама.

Как работает угон форм для отправки почты?
PHP сценарий, который отправляет почту, обычно вызывает функцию mail() для отправки почты. Например, код для такого сценария может выглядеть следующим образом:

mail( “yourname@example.com”, “Feedback Form Results”, $message, “From: $email” );

Приведенный выше код отправляет сообщение предположительно по адресу веб-мастера yourname@example.com. В качестве адреса отправителя передается значение, которое содержится в переменной $email, полученной из веб-формы.

Если в сценарии не предпринимается никаких действий для проверки переменной $email перед вызовом функции mail(), это создает возможность для спамера вводить дополнительные заголовки в электронное сообщение, добавив следующие строки в переменную $email.

some-email-address@example.com
CC: another-email-address@example.com, yet-another-email-addresses@example.com, etc-etc@example.com

PHP функция mail() будет тупо вставлять эти строки в заголовок электронного сообщения и передавать почтовому транспортному агенту, который в свою очередь доставит почту всем, кто указан в списке. Так угоняют сценарии для рассылки спама.

Как избежать email инъекции и угона сценариев форм для отправки почты
Для предотвращения email-инъекции для приведенной выше формы необходимо проверять информацию, полученную из переменной $email.

Существует много способов определения попыток вставки почтовых заголовков в сценарии. PHP сценарий, сгенерированный с помощью Feedback Form Script Wizard на сайте thesitewizard.com, выглядит следующим образом:

if ( preg_match( “/[
]/”, $name ) || preg_match( “/[
]/”, $email ) ) {

[... direct user to an error page and quit ...]

}

Переменная $name содержит имя посетителя, а $email запоминает адрес электронной почты. Функция preg_match() вызывается для выяснения, включают ли эти две переменные символы новой строки. Символы новой строки как возврат каретки(”
” в PHP) и новая строка (”
” в PHP) создают новую строку в почтовом заголовке, что позволяет создать новую строку “cc:”. Если данный код обнаруживает символы новой строки, то пользователь отправляется на страницу ошибки.

Заключение
Избегайте этой дыры в безопасности в ваших PHP сценариях для отправки почты, убедившись, что все, что поступает в почтовые заголовки, сгенерированные сценарием, проверяется на наличие потенциально опасных символов, таких как приведенные выше. В противном случае, ваш сценарий может быть использован для рассылки спама другим лицам без вашего ведома.
А вот тут вы можете скачать skype бесплатно, без вирусов и хакерских дополнений. Качество связи на уровне.

Можно еще почитать вот это: