Почта PHP (): Каковы потенциальные проблемы, на которые нужно обратить внимание?

Учитывая контактную форму, которая принимает пользовательский ввод пользователя (например, адрес, строка темы, сообщение), каковы некоторые последствия для безопасности и «gotchas», чтобы быть осторожным?

Как минимум, адрес электронной почты пользователя должен быть подтвержден (вероятно, с использованием filter_var () или эквивалентного). Из того, что я прочитал, это также должно помешать добавлению дополнительных заголовков в скрипт.

Как насчет темы и содержания сообщений? Требуются ли какие-либо санитарные условия для этих месторождений? Я полагаю, что клиент электронной почты предотвратит запуск сценариев автоматически, и я не особо беспокоюсь о таких вещах, как теги HTML (если кто-то хочет потратить время на стильный адрес электронной почты, это их прерогатива – я просто не буду видеть это: P). Если требуется санитария, что лучше всего сделать, не слишком навязчивым (т. Е. Сохранить характер электронной почты одинаково)?

Если вы используете четвертый аргумент, дополнительные заголовки, обратите внимание на вставку дополнительных заголовков, если вы делаете что-то вроде этого …

mail($to, $subject, $message, 'From: $email'); 

Если $email поступает с пользовательского ввода и не подвергается дезинфекции, пользователь может ввести что-то вроде …

\n\rCC:spammer@spamzilla.com

Вы можете избежать этого, отфильтровывая \n и \r или filter_var($email, FILTER_VALIDATE_EMAIL) $email с помощью функции filter_var($email, FILTER_VALIDATE_EMAIL) .

Убедитесь, что люди не могут вводить инъекции линий ни в чем, кроме тела. Кроме того, сделать статичный получатель и никогда не передавать его, например, через скрытое поле формы. Однако добавление такого поля – неплохая идея; но блокировать IP, если он не установлен на ожидаемое значение – тогда ваш клиент, вероятно, является спамом-ботом.