检查请求来源并验证电子邮件发件人 - Node.js

时间:2016-09-14 15:41:53

标签: node.js validation email mailgun

我正在构建一个具有消息传递系统的平台。

我想发布电子邮件中的邮件,为此我在Mailgun上创建了一条路线,将电子邮件重定向到我的API。

这部分工作正常,但我需要在将消息实际发布到我的平台之前验证请求。我将看到发件人的电子邮件,在我的数据库中查找邮件的作者和电子邮件的目标,以选择将收到邮件的配置文件组。

所以,一个例子: 如果我收到电子邮件

from: user@domain.com
to: group@myplatform.com 
message: Lorem ipsum dolor sit amet, consectetur adipiscing elit...

我会在我的数据库中检查“user@domain.com”并查看他是否可以发布到“群组”,如果是,我会将消息发布到它。

问题是,我需要验证两件事:

  • 如果我的API上的请求确实来自Mailgun,以避免欺骗
  • 检查电子邮件的发件人是否真实,而不是任何垃圾邮件

要做第一个我看到我可以在Node上使用 req.connection.remoteAddress 来获取原点,然后我尝试对其进行反向查找IP并查看它是否来自Mailgun,但反向查找没有找到任何内容。

要验证电子邮件来源,我看到我可以使用电子邮件中的 已接收 标题,然后我考虑使用DNS查找检查它们,看看是否MX记录匹配。

我对此非常陌生,我的问题是,是否有更简单的方法来验证这两个步骤并且它是否安全?

1 个答案:

答案 0 :(得分:0)

有一个"入站垃圾邮件过滤器"在Mailgun控制台中设置域时可以启用的复选框。

请参阅"保护Webhooks" Mailgun文档的一部分,以避免欺骗。

https://documentation.mailgun.com/user_manual.html#webhooks

  

要验证webhook是否来自Mailgun,您需要:

     
      
  • 连接时间戳和令牌值。
  •   
  • 使用HMAC算法对结果字符串进行编码(使用API​​密钥作为密钥和SHA256摘要模式)。
  •   
  • 将得到的hexdigest与签名进行比较。
  •   
  • 或者,您可以在本地缓存令牌值,并且不会使用相同的令牌来遵守任何后续请求。这样可以防止重播攻击。
  •   
  • 您可以选择检查时间戳是否与当前时间相差太远。
  •