Как уже отмечали другие, filter_var
- это здорово. Если он недоступен, добавьте его в свою панель инструментов.
Переменная $headers
особенно плоха в плане безопасности. Это может быть добавлено и вызвать поддельные заголовки, которые будут добавлены. Этот пост под названием Email Injection обсуждает это довольно хорошо.
filter_var i
замечательно, но другой способ убедиться, что что-то является адресом электронной почты, а не чем-то плохим, - это использовать функцию isMail()
. Вот один из них:
function isEmail($email) {
return preg_match('|^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]{2,})+$|i', $email);
};
Итак, чтобы использовать это, вы можете сделать:
if (isset($_POST['email']) && isEmail($_POST['email'])) {
$email = $_POST['email'] ;
} else {
// you could halt execution here, set $email to a default email address
// display an error, redirect, or some combination here,
}
С точки зрения проверки вручную, ограничение длины с помощью substr()
, запуск strip_tags()
и иное ограничение того, что можно вставить.