You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Telegram机器人中获取发送者IP?有无替代验证方案?

Telegram专属链接访问验证方案

能否从Telegram获取用户IP?

直接通过Telegram Bot API无法获取用户的真实IP地址。用户与Bot交互时,Telegram服务器作为中间代理层,不会暴露用户的真实IP;当用户点击Bot发送的外部链接时,请求会经过Telegram的代理服务器,你的PHP服务器通过$_SERVER['REMOTE_ADDR']获取到的是Telegram的代理IP,而非用户实际IP。因此通过IP匹配来验证用户身份的思路不可行。

无需IP的替代方案

1. 生成绑定用户ID的唯一令牌链接

这是最常用且可靠的方案,步骤如下:

  • 当用户向Bot请求访问链接时,从Bot API获取用户的Telegram ID,生成一个包含用户ID、过期时间和随机盐的唯一令牌(比如用哈希算法生成)。
  • 将令牌、对应的用户ID和过期时间存储到数据库或缓存系统中。
  • 把令牌作为URL参数拼接在PHP链接后发送给用户,例如:https://your-server.com/access.php?token=xxx。
  • 用户访问链接时,PHP脚本提取令牌,查询存储系统验证令牌是否存在、未过期且绑定的用户ID合法,验证通过则返回内容,否则拒绝访问。

示例PHP代码片段:

// Bot端生成令牌并存储(以PHP为例)
$userId = 123456; // 从Telegram Bot API获取的用户ID
$expires = time() + 3600; // 1小时过期
$salt = random_bytes(16);
$token = hash('sha256', $userId . $expires . $salt);

// 将token、userId、expires存入数据库(示例)
// $pdo->prepare("INSERT INTO access_tokens (token, user_id, expires) VALUES (?, ?, ?)")->execute([$token, $userId, $expires]);

// 生成用户访问链接
$accessLink = "https://your-server.com/access.php?token=" . urlencode($token);

// 验证脚本access.php
if (!isset($_GET['token'])) {
    http_response_code(403);
    exit("禁止访问");
}

$token = $_GET['token'];
// 从数据库查询令牌信息
$stmt = $pdo->prepare("SELECT user_id, expires FROM access_tokens WHERE token = ?");
$stmt->execute([$token]);
$tokenData = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$tokenData || $tokenData['expires'] < time()) {
    http_response_code(403);
    exit("令牌无效或已过期");
}

// 验证通过,返回专属内容
echo "仅你可见的内容";

2. 集成Telegram登录小部件

如果允许用户额外完成授权步骤,可以使用Telegram官方的登录小部件:

  • 在Telegram Bot平台配置登录小部件,指定允许的域名。
  • 在你的PHP页面嵌入登录小部件代码,用户点击后会跳转到Telegram进行身份授权。
  • 授权完成后,Telegram会向你的PHP页面返回用户ID和验证哈希,你可以通过官方提供的算法验证哈希有效性,确认用户身份后允许访问。
  • 优点是依赖官方授权机制,安全性高;缺点是需要用户额外操作授权。

3. 临时会话密钥绑定

适合短时效的访问场景(如用户刚和Bot互动后立即打开链接):

  • 用户请求链接时,Bot生成一个临时会话密钥,将密钥与用户ID关联存入缓存(如Redis),设置较短的过期时间(比如10分钟)。
  • Bot将带有会话密钥的链接发送给用户。
  • 用户访问链接时,PHP脚本提取密钥,检查缓存中是否存在该密钥且绑定的用户ID合法,验证通过则允许访问。

内容的提问来源于stack exchange,提问作者AKMalkadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:25:20