如何验证电子邮件发件人地址未被伪造?

6
根据我之前在Google App Engine上提出的这个问题,如果我可以访问标准电子邮件中的所有信息,不仅包括FromToSubjectBody等字段,还包括所有标头和MIME信息,那么如何验证两个具有相同From地址的传入电子邮件实际上来自同一发件人。

我目前考虑的:

  • 检查电子邮件发送服务器的IP地址
  • 检查电子邮件发送服务器的DNS记录
  • 验证电子邮件的发送代理(即Web界面、Outlook、Thunderbird等)
  • 检查回复字段
  • 等等

我意识到这是一个复杂的问题(我相信像Posterous这样的公司已经花费了大量时间解决这个问题)。我只是想找到一些初步开始的标准。谢谢!

更新:

迄今为止,答案确实有所帮助,但为了帮助他们,我的项目背景是,作为Web应用程序,我将从我的用户那里大量接收电子邮件。他们将使用电子邮件作为主要的输入数据方式。这就是我为什么提出Posterous类比的原因。用例非常相似。


1
需要考虑的一件事是 - 我使用笔记本电脑,并在一天中从许多不同的IP地址和SMTP服务器发送电子邮件。 - Scott Saunders
是的,谢谢,Scott,我确实考虑过这一点,这就是为什么我很想看到其他方法的原因。 - daveslab
1
刚偶然看到这个问题,我也在尝试类似的东西。你能分享一下你最终做了什么吗? - please delete me
5个回答

3

你说得对,所有的邮件头部和“已知好的”电子邮件组合在一起可以帮助识别可能的欺骗性电子邮件。

你正在开发的东西最多只能算是一种启发式而不是算法。

我建议按照时间和与“已知好的”电子邮件时间靠近程度对字段进行加权计算...

此外,如果“已知好的”电子邮件的结构不同于可疑邮件;即内联图片、HTML 代码、缩短的 URL 等。


2
为什么不通过spamassassin或其他过滤器来运行电子邮件,以便附加贝叶斯分数。然后你只需要阅读该分数即可。这将避免你重复造轮子。
你可以将电子邮件与个人之前的所有电子邮件数据库进行贝叶斯评分。
还有查找发件人允许框架和域密钥,SpamAssassin可以为你完成此任务。

2
只是为了补充我兄弟之前的帖子:
不知道您想要分析的上下文是什么,非常泛泛地说,我建议您首先使用SPF或DomainKeys来限制可能被接受的来自恶意来源的电子邮件的可能性。我还建议仅使用一个具有SSL安全性的SMTP服务器。我这样做,环游世界时很少遇到无法发送邮件的情况,在这些情况下,唯一有效的方法是Webmail(没有安全的本地SMTP)。
此外:如果您正在验证邮件确实来自您自己,则还可以使用PGP工具在发送邮件时签署您的邮件,然后过滤任何没有有效签名的邮件。 Thunderbird中的Enigmail是自动签名的好源,Outlook也有插件。
在那之后,如果您真的想对电子邮件进行更深入的研究,那么您可以使用Spam Bayes将电子邮件评分与以前的电子邮件数据库相比较。您将围绕非唯一数据(不包括“ To:”等条目)建立标记数据库,然后对电子邮件进行评分,以确定它是否与以前的电子邮件类似。理论上,您应该为任何邮件得到很高的分数。
显然,我不知道您的情况,但我认为有很多技术,但有时更容易去解决问题而不是在后面修复它。
更新:
根据提供的上下文:
我会考虑使用“地址扩展”,这是您的用户可以发送电子邮件到包含引用的地址,使用电子邮件地址:emailname+extension@domain.com GMail和许多其他服务器支持通过+ extension @传递电子邮件到正确的emailname@domain.com,而无需进行捣乱。您可以让用户使用唯一的ID作为扩展名发送邮件,这样您就会知道它来自他们,他们会感觉更加特别。显然,某人可以通过嗅探他们的出站或您的入站邮件来窃取其唯一代码,但这始终是可能的,如果某人能够这样做,那么他们可能也可以注入邮件。
如果您真的只想走分析路线,那么我建议仅使用SpamAssassin每个用户Bayes匹配的反向。在这里,您将每封邮件与发件人的邮件数据库进行比较(而不是传统的邮件匹配“到”帐户)。请记住,一旦您的数据库被错误的正面污染,您将不得不删除错误的正面或冒着该发件人的匹配完整性的风险。

2

可能不切实际,但可以起到作用的方法:

当收到一封邮件时,有一个“回复发件人”功能,只需询问他们是否发送了邮件。这可以采用自动生成的确认链接或其他形式。

但由于我不知道该项目的具体情况,这可能不可行...例如,如果您需要为每个用户多次执行此操作,那么没有人会容忍它。


2
也许可以考虑使用发件人策略框架。它可能不完全符合您的要求,但可能会有所帮助。
简而言之,SPF记录的设计意图是允许接收邮件传输代理(MTA)询问出现在电子邮件中的域名(发件人)的名称服务器,并确定邮件的来源IP地址(源)是否被授权为发件人域的邮件发送者。
摘自维基百科:
引用:

发件人策略框架(SPF)是一种电子邮件验证系统,旨在通过解决常见漏洞——源地址欺骗来防止电子邮件垃圾邮件。 SPF允许电子邮件管理员通过在公共DNS记录中创建特定的DNS SPF记录来指定哪些互联网主机被允许发送声称起源于该域的电子邮件。然后,邮件交换器使用DNS记录根据电子邮件管理员发布的列表验证发件人的身份。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接