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