Предотвращение внедрения заголовка почты php
На странице справки по php для функции mail был пользовательский комментарий, в котором говорилось: "Позаботьтесь, чтобы предотвратить внедрение заголовка".
В моем приложении я использую функцию mail, и единственным пользовательским вводом, который я использую в качестве параметра функции, является адрес электронной почты.
Я делаю предварительную проверку адреса электронной почты с помощью регулярных выражений ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$
,
Это также предотвратит инъекцию заголовка?
Спасибо,
JRH
2 ответа
Кто-то хотел бы ввести что-то вроде этого:
user_address@domain.com
CC: spam_address1@domain.com, spam_address2@domain.com, spam_address3@domain.com
Вы не разрешаете \r\n, который необходим для определения новой информации заголовка. Так что ваше приложение безопасно.
Внедрение заголовков представляет собой риск только в том случае, если вы помещаете предоставленные пользователем данные в заголовки сообщений. Один типичный пример - использование отправленного адреса электронной почты для установки заголовка "Ответить".
Это то, что я использую:
$email = preg_replace(array("/\r/i","/\n/i", "/%0a/i", "/%0d/i", "/Content-Type:/i", "/bcc:/i", "/to:/i", "/cc:/i", "/Content\-Transfer\-Encoding\:/i", "/Mime\-Version\:/i" ), "", $email);