Php 任何人都可以发送电子邮件的安全问题
我有一个网络服务器,让我发送电子邮件(使用PHP),我可以使任何人的发件人。。。为什么这是可能的?这怎么不是一个安全问题 使用php邮件函数Php 任何人都可以发送电子邮件的安全问题,php,email,Php,Email,我有一个网络服务器,让我发送电子邮件(使用PHP),我可以使任何人的发件人。。。为什么这是可能的?这怎么不是一个安全问题 使用php邮件函数 // To send HTML mail, the Content-type header must be set $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Additio
// To send HTML mail, the Content-type header must be set
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Additional headers
$headers .= 'To: Jon Ives <jives@apple.com>' . "\r\n";
$headers .= 'From: Tim Cook <tcook@apple.com>' . "\r\n";
$message = 'I need you to create a clear iPhone.';
// Mail it
mail($to, $subject, $message, $headers);
远程服务器解析为apple.com,因此它将始终位于那里 现在,远程服务器只知道您的SMTP地址(不在乎) 由于发件人在电子邮件标题中被提及,因此正在使用该邮件 结论:这就是电子邮件的工作原理
我希望我的解释尽可能简单。你说的是伪造的信息;发送是可能的,尽管收件人接收消息的可能性很小。有一些安全措施可以防止邮件伪造:
spf2.0/mfrom ptr:mx.example.com +a +ip4:192.168.1.1 -all
此SPF记录表示,只有来自服务器mx.example.com
、属于example.com的所有A记录以及IPv4地址192.168.1.1
的邮件才能发送example.com的电子邮件,其他邮件都不能发送(-all
)
域密钥识别邮件(DKIM)/域密钥
我将重点讨论DKIM,因为DomainKeys有一半不推荐使用,但前提是相同的
DomainKeys Identified Mail(DKIM)是一种将域名与电子邮件关联的方法,从而允许个人、角色或组织对邮件承担一定责任。该关联通过可由收件人验证的数字签名建立。签名者通过在消息头中添加DKIM Signature:字段来声明责任,这与消息的实际作者或收件人无关。验证器使用DNS恢复签名者的公钥,然后验证签名是否与实际消息的内容匹配
DKIM与SPF的不同之处在于SPF仅与DNS绑定,而DKIM是邮件本身中存在的签名。如果您熟悉的概念,这就是DKIM的本质。发送方拥有用于加密消息的私钥;它使公钥可访问(通过DNS TXT记录)仅用于解密
基本上,DKIM会问这样一个问题,“我收到的消息真的是来自发送者X吗?”
想象一下这个场景:苏西给维多利亚写信。除了这封信,还有苏西设计的加密密码。苏茜让里克把信带到维多利亚那儿去。瑞克敲了敲维多利亚的门,拿出了这封带有加密密码的信。在收到这封信之前,维多利亚拿出了她的“解密书”(把它想象成白页——一个公开的解密代码列表,但不用于加密);她解密密码,发现它实际上是苏茜的签名,然后接受瑞克的信息。记住,没有人能伪造Susie的签名,除非Susie释放她的加密密钥
有没有办法从电子邮件中伪造日期和时间
有点。发送日期如下:
$headers .= 'Date: 2010-1-2 12:32:13' . "\r\n";
但是,接收SMTP服务器将始终在邮件上添加自己的时间戳。根据邮件服务/客户端的不同,可以读取日期
标头,也可以读取另一个元时间戳(例如,接收SMTP服务器添加到标头)
举个例子,我相信gmail会尊重发件人设置的日期
标题——我看到了1970年1月1日(Unix e.com的开始)的电子邮件
$headers .= 'Date: 2010-1-2 12:32:13' . "\r\n";