如何在php中正确转义电子邮件标题
我有以下php代码如何在php中正确转义电子邮件标题,php,email,Php,Email,我有以下php代码 <?php $from = $_POST['email']; $to = "myaddr@myserver.com"; $subject = "new message"; $message = "new message from ". $_POST['email'] ." >>> " . $_POST['message']; $headers = "From:" . $from; mail($to,$subject,$message, $heade
<?php
$from = $_POST['email'];
$to = "myaddr@myserver.com";
$subject = "new message";
$message = "new message from ". $_POST['email'] ." >>> " . $_POST['message'];
$headers = "From:" . $from;
mail($to,$subject,$message, $headers);
我刚开始使用php,所以这是复制的结果。我怀疑这很容易受到攻击,因为人们可能只是在email address字段中插入一个换行字符,然后为我重写整个邮件标题
我该如何正确地逃避这一点?
当您进行验证时,您是否看到其他错误/漏洞?添加电子邮件验证:
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
//send mail after validation
mail($to,$subject,$message, $headers);
}
那么,您应该确保您的脚本所连接的邮件服务器得到了适当的保护。如果脚本首先连接到远程smtp主机,则应确保远程smtp主机安全
通常配置电子邮件服务器,以便通过安全的ssl加密通道提交电子邮件
安全电子邮件服务器通过端口465和587接受smtp邮件提交。这些端口是安全的smtp端口,大多数电子邮件服务器都支持这些端口 以下是我用来过滤电子邮件地址并将其添加为“回复”标题的内容:
$filtered\u email=filter\u var(trim($email),filter\u SANITIZE\u email);
$headers='来自:system@myserver.com' . “\r\n”;
如果($U电子邮件){
$headers.=“回复:”.$filtered\u电子邮件。“\r\n”;
}
filter\u var
的文档说明,如果失败,它可能返回false
,因此我将它放在if
语句中(也应该将其作为空字符串处理)
正如我在评论中所说,如果“发件人:”不是发送邮件的服务器地址,垃圾邮件过滤器可能会阻止您的电子邮件到达目的地,因此最好使用“回复:”来代替。一种可能是查看像Swiftmailer这样的库并从源代码中学习。我认为PHP确实可以防止头部注入,但我认为需要将$headers
指定为一个数组,这样才能工作。不过不确定!这并不能回答您的问题,但许多垃圾邮件过滤器会过滤掉带有“发件人”的电子邮件,而实际上不允许来自发送电子邮件的服务器。因此,您可能应该将其设置为“something@myserver.com并改为设置“回复:”选项。