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, если он не установлен на ожидаемое значение - тогда ваш клиент, вероятно, является спамом-ботом.