1

我有一个 Telegram 机器人,它设置为使用 Telegram webhook 机制,但是如何信任请求并知道它们是否来自 Telegram?

基于 Telegram 文档,我发现有两种方法:

  • 将它们限制为 Telegam ip(这很脏,如果由于某种原因 Telegam 更改其 ip,我的机器人将关闭,所以它不是一个选项)
  • 为 webhook 设置一个私有长 url,所以只有我的服务器和电报知道 url(我认为这不是保护我的 webhook 的足够好的解决方案,如果由于某种原因我的 url 泄漏,url 是公开的,每个人都可以假装他们是电报和发送虚假请求)

这两个是我发现的有什么我想念的吗?为什么 Telegram 不为其 webhook 提供像 OAuth2 这样的 rsa 公钥或像 Github 这样的可信令牌或签名?私人网址是否足以保证安全?

4

2 回答 2

0

关于这里的IP限制:

在端口 443、80、88 或 8443 上接受来自子网 149.154.160.0/20 和 91.108.4.0/22 的传入 POST。

如果您决定将流量限制在我们特定的地址范围内,请在遇到麻烦时随时关注本文档。我们的 IP 范围将来可能会改变。

Telegram 总是在应用重要更改之前通知用户,因此如果您订阅他们的BotNews频道,您将不会错过有关 ip-range 更改的新闻。所以我认为它仍然是一个不错的选择。


关于

如果由于某种原因我的网址泄露,网址是公开的,每个人都可以假装他们是电报并发送虚假请求

我认为您的论点是正确的,但是私人 url 泄漏的可能性并不高,而且它在某种程度上是蛮力安全的。根据我们对 Telegram 如何关心安全性的了解,如果他们收到虚假 webhook 请求的报告,他们会提供解决方案。

虽然如果您仍然担心,您可以使用本地 Bot Api 服务器,您只能信任您的内部 IP 地址。

于 2021-11-09T11:13:47.997 回答
0

您可以将秘密身份验证令牌作为查询参数附加到 webhook 的 URL。即https://example.com/telegram_webhook?auth=12345您将在您的服务器上进行验证。

如果您担心您的基本 URL 太容易获取,这会更加安全。

...最理想的是,您需要 Mutual TLS (mTLS),但我不知道 Telegram 支持这一点。

于 2022-02-15T16:19:16.973 回答