如何在PHP中正确转义Email标头

时间:2018-07-01 20:34:22

标签: php email

我有以下php代码

tmp_name

?>

我刚启动php,所以这是复制的结果。我怀疑这很容易受到攻击,因为可能只需要在电子邮件地址字段中插入换行符,然后为我重写整个邮件头即可。

我该如何正确地避免这种情况? 而当您使用它时-您还看到其他错误/外伤吗?

3 个答案:

答案 0 :(得分:0)

添加电子邮件验证:

if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    //send mail after validation
    mail($to,$subject,$message, $headers);
}

答案 1 :(得分:0)

您应该确保脚本连接到的邮件服务器受到正确保护。如果脚本首先连接到远程smtp主机,则应确保远程smtp主机受到保护。

通常配置电子邮件服务器,以便通过安全的ssl加密通道提交电子邮件。

安全电子邮件服务器接受通过端口465和587提交的smtp邮件。这些端口是安全的smtp端口,大多数电子邮件服务器都支持这些端口。 What is the difference between ports 465 and 587?

答案 2 :(得分:0)

这是我用来过滤电子邮件地址并将其添加为“答复”标题的方法:

$filtered_email = filter_var(trim($email), FILTER_SANITIZE_EMAIL);
$headers = 'From: system@myserver.com' . "\r\n";
if ( $filtered_email ) {
    $headers .= 'Reply-To: ' . $filtered_email . "\r\n";
}

filter_var的文档说,如果失败,它可能会返回false,所以我将其放在if语句中(也应将其作为空字符串处理)。

正如我在评论中所说,如果“发件人:”不是发送邮件的服务器,则垃圾邮件过滤器可能会阻止您的电子邮件到达目的地,因此最好使用“回复至:”代替。