PHP mail(): Каковы потенциальные проблемы, на которые нужно обратить внимание?
Учитывая контактную форму, которая принимает пользовательский ввод пользователя (например, адрес, строку темы, сообщение), каковы некоторые последствия для безопасности и "gotchas", чтобы быть осторожным?
Как минимум, адрес электронной почты пользователя должен быть проверен (вероятно, с использованием filter_var() или эквивалентного). Из того, что я прочитал, это также должно помешать добавлению дополнительных заголовков в script.
Как насчет темы и содержания сообщения? Требуются ли какие-либо санитарные условия для этих месторождений? Я полагаю, что почтовый клиент предотвратит запуск таких сценариев, как скрипты, и меня не особенно беспокоят такие вещи, как теги HTML (если кто-то хочет тратить время на стильный адрес электронной почты, что их прерогатива - я просто не буду видеть это: P). Если требуется санитария, какой лучший способ сделать это, не будучи слишком навязчивым (т.е. Сохранить характер электронной почты одинаковым)?
Ответы
Ответ 1
Если вы используете четвертый аргумент, дополнительные заголовки, обратите внимание на вставку дополнительных заголовков, если вы делаете что-то вроде этого...
mail($to, $subject, $message, 'From: $email');
Если $email
поступает с пользовательского ввода и не подвергается дезинфекции, пользователь может ввести что-то вроде...
\n\rCC:[email protected]
Вы можете избежать этого, отфильтровывая \n
и \r
или проверяя $email
с помощью функции filter_var($email, FILTER_VALIDATE_EMAIL)
.
Ответ 2
Убедитесь, что люди не могут вводить разрывы строк ни в чем, кроме тела. Кроме того, сделать статичный получатель и никогда не передавать его, например. через скрытое поле формы. Однако добавление такого поля - неплохая идея; но блокировать IP, если он не установлен на ожидаемое значение - тогда ваш клиент, вероятно, является спамом-ботом.