6

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

到目前为止我所考虑的:

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

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

更新:

到目前为止的答案确实很有帮助,但只是为了帮助他们,我的项目的背景是我会从我的用户那里收到大量的电子邮件作为 web 应用程序。他们将使用他们的电子邮件作为将数据输入我的系统的主要方式。这就是我为什么做后世类比的原因。用例非常相似。

4

5 回答 5

3

你是对的,所有的标题加在一起,“已知良好”的电子邮件进行比较可以帮助识别可能的欺骗电子邮件。

您正在开发的可能充其量是启发式而不是算法。

我会考虑按一天中的时间以及与“已知良好”电子邮件的一天中时间的接近程度来对字段进行加权...

此外,如果“已知良好”电子邮件的结构与嫌疑人不同;即内联图像、html、缩短的 url 等。

于 2009-12-04T14:51:26.310 回答
2

也许考虑使用Sender Policy Framework。它可能不是您正在寻找的东西,但它可能会有所帮助。

简而言之,SPF 记录的设计意图是允许接收 MTA(消息传输代理)询问出现在电子邮件(发件人)中的域的名称服务器,并确定邮件的原始 IP(源)是否被授权为发件人的域发送邮件。

摘自维基百科:

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

于 2009-12-04T16:17:18.227 回答
2

为什么不通过 spamassassin 或一些附加贝叶斯分数的过滤器来运行电子邮件。然后,您可以阅读该分数。它将避免您重新发明轮子。

您可以根据个人以前所有电子邮件的数据库对电子邮件进行贝叶斯评分。

还可以查找 SpamAssassin 可以为您做的 Sender Permitted Framework 和 DomainKeys。

于 2009-12-04T15:01:14.733 回答
2

只是为了恭维我的兄弟们早些时候发帖:

不知道您要分析的上下文,并且非常笼统,我建议您的第一个停靠点是 SPF 或 DomainKeys,以限制来自流氓来源的电子邮件被接受的可能性。我还建议仅使用一台具有 SSL 安全性的 SMTP 服务器。我这样做并在世界各地旅行,我很少遇到无法发送邮件的情况,在这种情况下,唯一有效的是网络邮件(没有安全的本地 SMTP)。

除此之外:如果您正在验证邮件确实来自您自己,那么您还可以使用 PGP 工具在发送时对您的邮件进行签名,然后过滤任何没有有效签名的邮件。Thunderbird 中的 Enigmail 是一个很好的自动签名来源,也有适用于 Outlook 的插件。

在那之后,如果你真的想对一封电子邮件做更多的取证工作,那么你可以使用垃圾邮件贝叶斯根据以前的电子邮件数据库对电子邮件进行评分。您将围绕非唯一数据(不包括诸如“To:”之类的条目)建立一个令牌数据库,然后对电子邮件与之前的电子邮件相似的概率进行评分。从理论上讲,您应该为任何邮件获得很高的分数。

显然我不知道你的情况,但我认为有很多技术,但有时更容易找到问题的根源而不是尝试修复它。

更新

根据提供的上下文:

我会考虑使用“地址扩展”,这是您的用户可以将邮件发送到包含使用电子邮件地址的引用的地址:emailname+extension@domain.com GMail 和许多其他服务器支持通过 +extension@ ​​传递电子邮件到正确的 emailname@domain.com 没有 hi-jinx。您可以让用户发送带有唯一 ID 作为扩展名的邮件,这样您就会知道邮件来自他们并且他们会感觉更特别。显然,有人可以通过嗅探他们发出或收到的邮件来窃取他们的唯一代码,但这总是有可能的,如果有人能做到这一点,他们也可能会注入邮件。

如果你真的只是想沿着分析路线走,那么我建议只使用 SpamAssassin 每用户贝叶斯匹配的反向。您将每封邮件与来自发件人的邮件数据库进行比较(而不是传统的邮件“到”帐户匹配)。请记住,一旦您的数据库被误报污染,您将不得不删除误报或冒着匹配该发件人的完整性的风险。

于 2009-12-04T15:16:38.950 回答
2

可能不实用,但可行:

当收到的邮件到达时,有一个“回复发件人”功能,并简单地询问他们是否发送了它。这可以是自动生成的确认链接或其他形式。

但是由于我不知道该项目的具体细节,这可能不切实际……就像您必须为每个用户多次执行此操作一样,没有人会忍受它。

于 2009-12-04T15:17:01.180 回答