您所说的是伪造的消息;可以发送,尽管收件人不太可能收到消息。有一些安全措施可以防止消息伪造:
- 域密钥
- DKIM
- 防晒指数
- 发件人ID
DomainKeys 已被弃用,取而代之的是 DKIM。两者非常相似。SO 帖子“DomainKeys 与 DKIM 之间的区别?” 描述了差异。
SPF 和 SenderID 有时会相互混淆,但它们是不同的;请参阅SPF:SPF 与 SenderID。
它归结为收件人的 SMTP 服务器来实施和利用这些技术。例如,如果收到邮件但 SPF 检查失败,则该邮件将被标记为垃圾邮件,然后将进入“垃圾文件夹”,但该邮件仍被接受。更进一步,SMTP 服务器还可以验证消息的 DKIM 签名;如果验证失败,则不接受该消息。这些策略和邮件路径由接收邮件服务器/客户端确定,并且差异很大。
发件人策略框架 (SPF) / SenderID
发件人策略框架 (SPF) 是一种电子邮件验证系统,旨在通过验证发件人 IP 地址检测电子邮件欺骗(一种常见漏洞)来防止垃圾邮件。SPF 允许管理员通过在域名系统 (DNS) 中创建特定的 SPF 记录(或 TXT 记录)来指定允许哪些主机从给定域发送邮件。邮件交换器使用 DNS 来检查来自给定域的邮件是否由该域管理员批准的主机发送。
资料来源:维基百科
与 SPF 不同,SenderID 改为验证声称的责任地址 (PRA),请参阅RFC 4407。
基本上,这是一个 DNS 检查,询问“IP 地址X可以为域Y发送邮件吗?”
想象一下这个场景:苏西给维多利亚写了一封信。苏西先发制人地告诉维多利亚,只有苏西的哥哥约翰和苏西自己会送信给她。所以苏西把信交给约翰,让他沿着街走,然后把信交给维多利亚。维多利亚听到敲门声,约翰拿着苏西的信。因为之前的约定,苏西接受了这封信。几天后,苏西又给维多利亚写了一封信,但约翰病了,不能送信;于是,苏西让她的邻居瑞克沿着街走,把信交给维多利亚。里克敲了敲维多利亚的门,说他有一封苏茜的信。维多利亚拒绝了这封信并且不接受它(或者也许她把它放在桌子上稍后验证它以防万一有机会成为合法的),因为她希望只有 Susie 和 John 会传递来自 Susie 的信件。
example.com 的示例 SPF 记录:
spf2.0/mfrom ptr:mx.example.com +a +ip4:192.168.1.1 -all
这条 SPF 记录表明只有来自服务器的邮件mx.example.com
,所有A records
属于 example.com 和 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吗?”
想象一下这个场景:苏西给维多利亚写了一封信。除了这封信,还有苏西设计的加密代码。苏西让瑞克把信递给维多利亚。瑞克敲了敲维多利亚的门,递上那封带有加密密码的信。在接受这封信之前,Victoria 拿出了她的“解密书”(把它想象成 WhitePages——一个可公开访问的解密代码列表,但不用于加密);她解密代码发现它实际上是 Susie 的签名,然后接受了 Rick 的消息。请记住,除非 Susie 释放她的加密密钥,否则没有人可以伪造 Susie 的签名。
有没有办法从电子邮件中欺骗日期和时间?
有点儿。发送日期如您所愿:
$headers .= 'Date: 2010-1-2 12:32:13' . "\r\n";
但是,接收 SMTP 服务器将始终在邮件上放置自己的时间戳。根据邮件服务/客户端,Date
可以读取标头,或者可以读取另一个元时间戳(例如,接收 SMTP 服务器添加到标头)。
举个例子,我相信 gmail 会尊重Date
发件人放置的标题 - 我看过 1970 年 1 月 1 日(Unix 时代的开始)的电子邮件。这可能是个坏主意,尤其是对于收件箱中有很多邮件的邮箱 - 邮件可能会在中间或最后的某个地方丢失。