SendGrid 传入邮件 webhook - 如何保护我的端点

Posted

技术标签:

【中文标题】SendGrid 传入邮件 webhook - 如何保护我的端点【英文标题】:SendGrid incoming mail webhook - how do I secure my endpoint 【发布时间】:2014-01-18 21:09:00 【问题描述】:

我目前正在使用 SendGrid 的 Inbound Parse Webhook 将电子邮件提供给我的应用程序。通过将 URL 指向我的应用程序已公开的端点,我已经能够使其工作。 SendGrid 只是将电子邮件以 JSON 格式 HTTP POST 请求的形式发送到此端点,我只是在内部处理每个请求。

我的问题是,既然我已经让它工作了,我如何确保只有 SendGrid 可以使用这个端点?目前,任何人都可以利用此 HTTP POST 端点并假装已向应用程序发送了一封电子邮件。

我可以让 SendGrid 发送某种唯一键来识别自己吗?有没有办法可以通过IP地址限制?

【问题讨论】:

不要限制ip地址,根据docs他们一直在改变它。 【参考方案1】:

有两种方法可以保护您的端点。 SendGrid 的 webhook 支持基本身份验证(例如 https://user:pass@example.com/endpoint)。您还可以实现一个唯一键,在根据请求执行操作之前检查该键(例如https://example.com/endpoint?key=123)。

不过,简单的答案是,您添加到 URL 的任何内容都可以作为 SendGrid 的唯一身份验证。

【讨论】:

在发出请求时,键是否以这种方式作为参数在网络上可见?这将使您的端点容易受到向该确切路径发送请求的任何人的攻击。 我想听听关于@CezarT 评论的任何想法。如果我锁定我的应用程序上的 webhook 端点只响应 SendGrid 的 IP 地址怎么办?这(加上随机密钥)是否足以保护端点? 该示例使用 https,因为 ssl/tls 加密整个 http 层,因此 URL 的 GET 参数被加密。只要您只信任有效的证书,嗅探网络就不会使它们以纯文本形式显示。

以上是关于SendGrid 传入邮件 webhook - 如何保护我的端点的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postman 中使用 SendGrid 的 Inbound Parse Webhook 示例?

在共享主机上使用 Sendgrid 发送电子邮件

Azure 警报操作组:不发送到 webhook?

在 Firebase 中使用 Google Cloud 功能接收电子邮件

如何将动态数据传递到sendgrid webapp上设计的电子邮件模板? : - | Sendgrid

Azure : 通过 SendGrid 发送邮件