fix: callback auth uses CHAT_ID instead of user ID to prevent blocking all callbacks

- SENDER_ID (user ID) != MASTER_CHAT_ID (chat ID) caused all button callbacks to be rejected
- Switch to CHAT_ID comparison which is already correctly extracted from the update
- Add -n guard so unconfigured MASTER_CHAT_ID doesn't break existing deployments
This commit is contained in:
hotyue
2026-08-10 04:29:19 +00:00
parent b9743e47a1
commit c531fde2ba

View File

@@ -169,9 +169,9 @@ while true; do
MSG_ID=$(echo "$UPDATE" | jq -r '.callback_query.message.message_id // empty')
# [安全修复 #106] Telegram 发送者鉴权 — 只有 MASTER_CHAT_ID 能执行特权命令
SENDER_ID=$(echo "$UPDATE" | jq -r '.message.from.id // .callback_query.from.id // 0' 2>/dev/null)
if [ "$SENDER_ID" != "$MASTER_CHAT_ID" ] && [ "$SENDER_ID" != "0" ]; then
# 静默拒绝非授权用户,不泄露任何信息
# 使用 CHAT_ID已从 update 提取)与 MASTER_CHAT_ID 比较,兼容私聊/群组场景
if [ "$CHAT_ID" != "$MASTER_CHAT_ID" ] && [ -n "$MASTER_CHAT_ID" ]; then
# 静默拒绝非授权 chat,不泄露任何信息
if [ -n "$CB_ID" ]; then
curl -s --connect-timeout 5 -m 10 -X POST "https://api.telegram.org/bot${TG_TOKEN}/answerCallbackQuery" \
-d "callback_query_id=${CB_ID}" \