我正在构建一个具有消息传递系统的平台。
我想发布电子邮件中的邮件,为此我在Mailgun上创建了一条路线,将电子邮件重定向到我的API。
这部分工作正常,但我需要在将消息实际发布到我的平台之前验证请求。我将看到发件人的电子邮件,在我的数据库中查找邮件的作者和电子邮件的目标,以选择将收到邮件的配置文件组。
所以,一个例子: 如果我收到电子邮件
from: user@domain.com
to: group@myplatform.com
message: Lorem ipsum dolor sit amet, consectetur adipiscing elit...
我会在我的数据库中检查“user@domain.com”并查看他是否可以发布到“群组”,如果是,我会将消息发布到它。
问题是,我需要验证两件事:
要做第一个我看到我可以在Node上使用 req.connection.remoteAddress 来获取原点,然后我尝试对其进行反向查找IP并查看它是否来自Mailgun,但反向查找没有找到任何内容。
要验证电子邮件来源,我看到我可以使用电子邮件中的 已接收 标题,然后我考虑使用DNS查找检查它们,看看是否MX记录匹配。
我对此非常陌生,我的问题是,是否有更简单的方法来验证这两个步骤并且它是否安全?
答案 0 :(得分:0)
有一个"入站垃圾邮件过滤器"在Mailgun控制台中设置域时可以启用的复选框。
请参阅"保护Webhooks" Mailgun文档的一部分,以避免欺骗。
https://documentation.mailgun.com/user_manual.html#webhooks
要验证webhook是否来自Mailgun,您需要:
- 连接时间戳和令牌值。
- 使用HMAC算法对结果字符串进行编码(使用API密钥作为密钥和SHA256摘要模式)。
- 将得到的hexdigest与签名进行比较。
- 或者,您可以在本地缓存令牌值,并且不会使用相同的令牌来遵守任何后续请求。这样可以防止重播攻击。
- 您可以选择检查时间戳是否与当前时间相差太远。