Предотвращение инъекции заголовка почты PHP
-
19-09-2019 - |
Вопрос
На странице руководства PHP для функции почты был комментарий пользователя: «Будьте осторожны, чтобы предотвратить внедрение заголовка».
В своем приложении я использую функцию почты, и единственный пользовательский ввод, который я использую в качестве параметра функции, — это адрес электронной почты.
Я делаю предварительную проверку адреса электронной почты с помощью регулярного выражения ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$
.
Будет ли это также предотвращать внедрение заголовка?
Спасибо,
джрх
Решение
Кто-то хотел бы ввести что-то вроде этого:
адрес_пользователя@domain.com
СС:спам_адрес1@домен.com, спам_адрес2@домен.com, спам_адрес3@домен.com
Вы не позволяете который необходим для определения новой информации заголовка.Таким образом, ваше приложение безопасно.
Другие советы
Внедрение заголовка представляет собой риск только в том случае, если вы помещаете в заголовки сообщений данные, предоставленные пользователем.Типичным примером является использование опубликованного адреса электронной почты для установки заголовка «Ответить».
Это то, что я использую:
$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);