Как к sanitze вводу данных пользователем в PHP перед отправкой по почте?

Поскольку примитивы просто используют (string)$var или немедленно печатают эту переменную. PHP является динамически типизированным языком, и переменная будет литой для строкового представления на лету.

, Если Вы хотите преобразовать объекты в строки, необходимо будет определить __toString() метод, который возвращает строку. Этому методу запрещают выдать исключения.

47
задан Matt Hampel 30 August 2011 в 01:42
поделиться

4 ответа

Sanitize the post variable with filter_var().

Example here. Like:

echo filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);   
52
ответ дан 26 November 2019 в 19:47
поделиться

Как отмечали другие, 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 () и в противном случае ограничение того, что можно вставить.

4
ответ дан 26 November 2019 в 19:47
поделиться

Поскольку вы здесь не создаете SQL-запрос или что-то еще, единственная релевантная проверка, которую я могу видеть для этих входных данных, - это проверка электронной почты для $ _POST ["email"] и, возможно, буквенно-цифровой фильтр в других полях, если вы действительно хотите ограничить объем того, что может содержать сообщение.

Чтобы отфильтровать адрес электронной почты, просто используйте filter_var :

$email = filter_var($email, FILTER_SANITIZE_EMAIL);

Согласно предложению Фрэнка Фармера, вы также можно отфильтровать новые строки в теме электронного письма:

$subject = str_replace(array("\r","\n"),array(" "," "),$subject);
12
ответ дан 26 November 2019 в 19:47
поделиться

Вам необходимо удалить любые символы новой строки из ввода, предоставленного пользователями в заголовках $, которые передаются в mail () ($ email в вашем случае)! См. Внедрение электронной почты .

PHP должен позаботиться о санации $ to и $ subject, но есть версии PHP с ошибками (затронуты PHP 4 <= 4.4.6 и PHP 5 <= 5.2. 1, см. MOPB-34-2007 ).

4
ответ дан 26 November 2019 в 19:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: