您能建议我如何在不丢失原始消息数据的情况下防止PHP中的电子邮件注入mail()吗?例如,如果我需要让用户使用\r\n,To,CC等,所以我不想完全剥夺他们从消息了- 我仍然希望他们供货,但没有增加任何额外的头或以某种方式使邮件注入的情况发生。
mail()
\r\n
To
CC
互联网上的大多数建议都建议完全删除该数据-但我不想这样做。
我正在通过PHP mail()函数发送纯文本(非HTML)消息。
您有什么建议?
要过滤有效的电子邮件以在收件人电子邮件字段中使用,请查看filter_var():
filter_var()
$email = filter_var($_POST['recipient_email'], FILTER_VALIDATE_EMAIL); if ($email === FALSE) { echo 'Invalid email'; exit(1); }
这样可以确保您的用户仅提供有效的单一电子邮件,然后您可以将其传递给该mail()功能。据我所知,没有办法使用PHP mail()函数通过消息主体插入标头,因此数据不需要任何特殊处理。
更新:
根据的文档mail(),当它直接与SMTP服务器通信时,您将需要阻止消息正文中的句号:
$body = str_replace("\n.", "\n..", $body);
更新#2:
显然,也可以通过主题进行注入,但是由于没有FILTER_VALIDATE_EMAIL_SUBJECT,您需要自己进行过滤:
FILTER_VALIDATE_EMAIL_SUBJECT
$subject = str_ireplace(array("\r", "\n", '%0A', '%0D'), '', $_POST['subject']);