- Telegram 绑定ID telegram_bind版本 1.4.3插件制作者 awinds免费845 行 / 45.8 KBHook / 路由 / 后台页用户可将自己的 Telegram 账号与论坛账号绑定,方便确认身份。支持实时绑定、新帖推送频道、站内通知推送到 Telegram。app/plugins/telegram_bind/plugin.php开发日志已有 3 条
个人独立维护项目。
主楼 插件质量报告
插件:
telegram_bindHook 功能范围 循环 使用频率 文件读写 修改系统表 读写系统表 读写自己的表 sidebar.feature_links 首页/侧栏快捷功能 否 5 - - - - notification.after_create 通知及未读数写入后 否 3 - - - 写 plugin_telegram_bind_notify_queue;读 plugin_telegram_bind_links profile.after_form 个人资料编辑表单 否 3 - - - 读 plugin_telegram_bind_links topic.after_save 主题保存后 否 3 - - app_users 写 plugin_telegram_bind_notify_queue request.csrf_exempt 请求 CSRF 豁免检查 否 2 - - - - site.closed_allow 站点关闭访问豁免检查 否 2 - - - - user_api.telegram_info 非系统hook 否 1 - - - 读 plugin_telegram_bind_links 颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。
数据字典
plugin_telegram_bind_links字段 类型 可空 默认值 约束 id id 否 - 主键、自增 user_id uint 否 - 唯一 telegram_id {$bigint} 否 - 唯一 chat_id {$bigint} 否 - - telegram_username string 否 - - first_name string 否 - - bound_at uint 否 - - notify_enabled INTEGER 否 0 - plugin_telegram_bind_codes字段 类型 可空 默认值 约束 id id 否 - 主键、自增 user_id uint 否 - - code key 否 - 唯一 status INTEGER 否 - - expires_at uint 否 - - created_at uint 否 - - plugin_telegram_bind_notify_queue字段 类型 可空 默认值 约束 id id 否 - 主键、自增 user_id uint 否 - - chat_id string 否 - - content text 否 - - topic_id uint 否 0 - status INTEGER 否 0 - attempts INTEGER 否 0 - created_at uint 否 - - sent_at uint 否 0 - 版本 1.3.0 更新:
1、支持开启用户绑定TG功能。用户绑定TG后使用user_api插件时可获取绑定tgid
2、支持TG频道功能,填写TG频道后新贴子会发送到TG频道,并且在快捷功能中显示TG频道的链接
3、支持TG群组,填写TG群组后在快捷功能中显示TG群组的链接版本 1.4.1 更新:
1、官方支持通知钩子后增加通知异步发送到TG功能。
2、个人设置绑定TG成功后可开启通知发送到TG功能,默认关闭(TG机器人发送限制)。🔍 插件审查报告(对照《AI 开发规则》与开发者文档)
🔒 安全问题
- Webhook 路由在从未启用过 Webhook 时无鉴权:telegram_bind_webhook_route 用 setting('plugin_telegram_bind_webhook_secret') 取密钥,仅当 $secret 非空才 hash_equals 校验(plugin.php:336-341);而该密钥只在 set_webhook 时生成(plugin.php:100-108、130)。若站长一直用轮询模式、从未点过「启用 Webhook」,密钥为空,任何人都能向 ?a=telegram_bind_webhook POST 任意 message 并触发 handle_message 及库写入。无数据泄露/越权,但属未鉴权入口;建议 secret 为空时直接 403。
- SQL 全部参数化(plugin.php:176、209、316、418 等),未发现注入。
- 无 XSS:输出均 h();机器人 Token 仅掩码回显(plugin.php:538-539、619),未泄露。
- 外部请求固定 api.telegram.org,走核心 remote_http_request(协议/超时/大小/重定向均受限),无 SSRF。
- 状态路由均 require_post()+need_login(),全局 check() 校验 CSRF;request.csrf_exempt / site.closed_allow 回调签名与核心一致,无越权、无积分改动。
⚡ 性能问题
topic.after_save 在发帖主流程内同步调用 Telegram sendMessage(plugin.php:292,timeout 5s):TG API 慢/超时时会阻塞发帖请求最多 5 秒(try/catch 兜住不报错)。建议改为写入现有队列由 cron 异步发送。该钩子非红区,row()/forum_by_id() 读取合规。
🐛 功能/规范缺陷
- description 含「Webhook」技术名词(plugin.php:787),违反规则 22(面向普通用户)。
- manifest author 为 bbs1org,与市场登记作者 awinds 不一致(plugin.php:788)。
- 其余注册 Hook 均真实存在且两参签名正确;notification.after_create 上下文与核心一致。
✅ 修复优先级
- Webhook secret 为空时拒绝请求(高,未鉴权入口)。
- topic.after_save 改队列异步推送(中,阻塞发帖)。
- 修正 description 与 author(低)。
版本 1.4.3 更新:
1、修复一些检查出来的问题🔍 插件审查报告(AI 自动审查,对照《AI 开发规则》与开发者文档;本插件未被 8/18 楼上 350 的报告覆盖,属独立首次审查)
插件:Telegram 绑定(telegram_bind)v1.4.3
结论:已完成命名规范、生命周期(install/uninstall 幂等)、数据库跨库兼容、红区 Hook 零 DB 读、Hook 真实性(含核心与跨插件依赖核对)、SQL 注入风险、CSRF/权限校验、CSS 变量规范等项审查,未发现安全、性能或功能性问题。