Поскольку примитивы просто используют (string)$var
или немедленно печатают эту переменную. PHP является динамически типизированным языком, и переменная будет литой для строкового представления на лету.
, Если Вы хотите преобразовать объекты в строки, необходимо будет определить __toString()
метод, который возвращает строку. Этому методу запрещают выдать исключения.
Sanitize the post variable with filter_var()
.
Example here. Like:
echo filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
Как отмечали другие, 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 ()
и в противном случае ограничение того, что можно вставить.
Поскольку вы здесь не создаете SQL-запрос или что-то еще, единственная релевантная проверка, которую я могу видеть для этих входных данных, - это проверка электронной почты для $ _POST ["email"] и, возможно, буквенно-цифровой фильтр в других полях, если вы действительно хотите ограничить объем того, что может содержать сообщение.
Чтобы отфильтровать адрес электронной почты, просто используйте filter_var :
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
Согласно предложению Фрэнка Фармера, вы также можно отфильтровать новые строки в теме электронного письма:
$subject = str_replace(array("\r","\n"),array(" "," "),$subject);
Вам необходимо удалить любые символы новой строки из ввода, предоставленного пользователями в заголовках $, которые передаются в mail () ($ email в вашем случае)! См. Внедрение электронной почты .
PHP должен позаботиться о санации $ to и $ subject, но есть версии PHP с ошибками (затронуты PHP 4 <= 4.4.6 и PHP 5 <= 5.2. 1, см. MOPB-34-2007 ).