我有以下php代码
tmp_name
?>
我刚启动php,所以这是复制的结果。我怀疑这很容易受到攻击,因为可能只需要在电子邮件地址字段中插入换行符,然后为我重写整个邮件头即可。
我该如何正确地避免这种情况? 而当您使用它时-您还看到其他错误/外伤吗?
答案 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
语句中(也应将其作为空字符串处理)。
正如我在评论中所说,如果“发件人:”不是发送邮件的服务器,则垃圾邮件过滤器可能会阻止您的电子邮件到达目的地,因此最好使用“回复至:”代替。