任何使用过 PHP 发送电子邮件的人都知道,我们可以使用任何我们想要的名字作为电子邮件的发件人。
我可以向某个公司的秘书发送一条信息,要求她提供非常敏感的客户或公司信息,而这条信息看起来就像是她的老板发来的——[email protected]
在我看来,这就像非常重大的安全问题。
为什么电子邮件系统不验证发件人的地址?
在我看来,有人在设计电子邮件基础设施时会想到以某种方式验证发件人的地址。
由此存在的另一个严重风险是:
我可以给自己发送一封 Facebook 密码重置邮件,复制邮件的格式,然后将该格式伪装成 Facebook 发送给用户,并存储用户输入的密码。当用户感到困惑,无法使用新密码登录时,他/她可能会去将密码重置为该密码,现在我拥有了用户的 Facebook 密码。
答案1
数字签名端到端解决发件人冒充问题(至少在技术上):
数字签名是一种数学方案,用于证明数字信息或文档的真实性。有效的数字签名使收件人有理由相信该信息是由已知发件人,这样发送者就无法否认发送了消息(身份验证和不可否认性),并且消息在传输过程中没有被更改(完整性)。数字签名通常用于软件分发、金融交易以及其他需要检测伪造或篡改的情况
签名可通过以下方式在电子邮件中使用邮件/多用途邮件和前列腺特发性硬化症/吉普赛证书。例如,Thunderbid 有一个流行的埃尼盖尔扩展与 GnuPG 交互以检查和签署消息。Outlook 支持 S/MIME。
要签署消息,发送者需要使用私钥不能共享。要检查消息,接收方使用公钥发送者的信息,可以分享给所有有兴趣验证此发送者消息的人。此类公钥可通过密钥服务器.还有主要签约方人们通过面对面的会面来确认他们的身份,并签署彼此的数字证书。
所以并不是没有人考虑过这个问题,实际上人们已经对它进行了详细的研究,解决方案已经实施并且已经可用了一段时间,包括免费软件。
对我来说,问题是:为什么不是每个人都在使用?为什么像 GMail、Outlook.com 或 Yahoo Mail 这样的大型邮件提供商不建议在提供电子邮件账户的同时提供数字证书,鼓励和帮助用户签署邮件?为什么员工在加入新公司时通常会获得一个电子邮件地址和一个密码来发送/接收邮件,而不是一对数字密钥来正确签署他/她的邮件?
也许,我们集体太自满或懒惰,不愿采取必要的措施。也许这就像从 IPv4 切换到 IPv6。我们知道我们应该这样做,但我们害怕改变和努力,等待世界其他国家先这样做,但这并没有发生。
答案2
电子邮件所基于的 SMTP 协议是在执行此类验证的方案出现且不受专利、出口限制等阻碍之前至少 20 年开发的。
如果您问为什么没有添加这样的功能——好吧,已经有很多尝试添加这样的功能了。
答案3
虽然您可以在发件人字段中输入任何内容,但是您发送电子邮件的 IP 地址是无法伪造的,因此总是可以追溯到冒名顶替者。
确实,人们有点粗心,只是假设他们认为认识的人发送的任何电子邮件都是来自他们的,而不管他们在电子邮件中询问什么。
有一次,当我收到一封电子邮件,其中询问了人们通常不会询问的信息时,我内心就会发出警报(我会产生怀疑)。然后我总是检查发件人的 IP 地址,如果我不确定,我会联系发件人,询问他们是否确实发送了该电子邮件。