أفضل ممارسات أمان بوتات Telegram
رمز البوت هو كلمة مرور يمكن لأي شخص استخدامها من أي مكان، بلا عامل تحقق ثانٍ وبلا تنبيه تسجيل دخول. معظم حوادث بوتات Telegram تبدأ من هناك. إليك ما يجب تأمينه، بالترتيب الذي عادة ما تسوء فيه الأمور.
1. تعامل مع الرمز كبيانات اعتماد حية
من يملك رمز بوتك يتحكم بالبوت بالكامل. يمكنه قراءة الرسائل الواردة، وإرسال رسائل باسمك، وتغيير الـ webhook الخاص بك حتى يتوقف خادمك عن استقبال التحديثات. لا توجد شاشة طلب كلمة مرور ولا موافقة جهاز تقف في طريقه.
أين تتسرب الرموز
- تُرفع ضمن commit إلى مستودع. الطريقة الأكثر شيوعًا بفارق كبير، والمستودعات العامة تُفحص باستمرار بواسطة بوتات ليست ملكك.
- تُلصق في محادثة دعم أو في نظام تتبع المشكلات. بمجرد وصولها إلى تذكرة، تنتهي في فهرس بحث ما.
- تُكتب مباشرة داخل نسخة تطبيق جوال أو واجهة أمامية. أي شيء يُشحن إلى جهاز العميل يصبح عامًا.
- تُترك في السجلات. إذا سجلت رابط الـ API كاملًا، فالرمز موجود داخل الرابط.
ماذا تفعل بدلًا من ذلك
- احتفظ بالرمز في متغير بيئة أو في مدير أسرار، وليس أبدًا في الكود المصدري.
- أضف
.envإلى.gitignoreقبل أول commit، وليس بعده. - أخفِ الرمز في مخرجات السجلات.
- استخدم رموزًا منفصلة للتطوير والإنتاج، حتى لا يؤثر تسرب رمز تجريبي على مستخدمين حقيقيين.
إذا تسرب رمز، ألغه
افتح BotFather، نفّذ /revoke واختر البوت. يتوقف الرمز القديم عن العمل فورًا وتحصل على رمز جديد. تدويره يكلّف بضع دقائق من التعطل. تركه كما هو يكلّف البوت نفسه. إعادة كتابة سجل git لا تفيد، لأن الرمز جُمع بالفعل.
2. أحكم إغلاق الـ webhook
إذا كان بوتك يستخدم webhook، فهذا الرابط نقطة نهاية مفتوحة على الإنترنت. أي شخص يجدها يمكنه نشر تحديثات مزيفة تبدو تمامًا مثل حركة مرور Telegram الحقيقية.
- حدد رمزًا سريًا. تقبل دالة
setWebhookمعاملًا باسمsecret_token. يعيد Telegram إرساله بعد ذلك في ترويسةX-Telegram-Bot-Api-Secret-Tokenمع كل طلب. ارفض كل ما لا يتطابق. - استخدم HTTPS بشهادة صالحة. يفرض Telegram ذلك، وهو يمنع قراءة المحتوى أثناء النقل.
- استخدم مسارًا يستحيل تخمينه. جزء عشوائي في الرابط ليس حماية حقيقية بحد ذاته، لكنه يخرجك من عمليات الفحص العشوائية.
- حدد ما تستقبله. معامل
allowed_updatesيتيح لك الاشتراك فقط في أنواع التحديثات التي تعالجها. مساحة هجوم أقل، وتحليل أقل. - استجب بسرعة. أكّد استلام الطلب، ثم نفّذ العمل بشكل غير متزامن. معالِجات webhook البطيئة هجوم حرمان من الخدمة ينتظر أن يحدث.
3. لا تثق أبدًا بمحتوى أي تحديث
كل ما في داخل التحديث كتبه مستخدم. الاسم المعروض، ونص الرسالة، وبيانات الـ callback عند الضغط على زر. كل هذا مُدخلات يتحكم بها المهاجم.
- تحقق من بيانات الـ callback على الخادم. زر يحمل
order_id=123يمكن إعادة تشغيله بـorder_id=124. تحقق من أن المستخدم الضاغط يملك السجل فعلًا. - عالج نص المستخدم بالـ escape قبل عرضه. إذا كنت ترسل الرسائل بصيغة HTML أو Markdown وتلصق اسمًا معروضًا كما هو، فاسم مُعدّ خصيصًا قد يكسر التنسيق أو يحقن رابطًا.
- استخدم استعلامات معلمنة لقاعدة البيانات. نص محادثة يصل إلى سلسلة استعلام يحمل نفس خطر الحقن الموجود في نموذج ويب.
- حدد الأحجام التي تقبلها. اضبط حدودًا لطول النص وحجم الملف قبل معالجة أي شيء.
4. أحكم إغلاق أوامر الإدارة
يكتسب كل بوت تقريبًا في النهاية أمر إدارة. بث جماعي، استرداد، تصدير المستخدمين. هنا بالضبط يتحول البوت العامل إلى حادثة.
- تحقق من قائمة سماح لمعرّفات المستخدمين على الخادم، محفوظة في الإعدادات. لا تستنتج أبدًا صفة الإدارة من اسم مستخدم، لأنه يمكن تغييره وإعادة استخدامه.
- لا تُخفِ، تحقق. يُكتشف الأمر غير الموثّق لحظة أن يجربه أحدهم. الغموض ليس ضبطًا فعليًا.
- أكّد الإجراءات المدمّرة بخطوة ثانية، وأدرج ما سيحدث في نص التأكيد.
- سجّل إجراءات الإدارة مع معرّف المستخدم والطابع الزمني، حتى تتمكن لاحقًا من الإجابة عن سؤال من أرسل ذلك البث.
5. فعّل وضع الخصوصية في المجموعات
افتراضيًا، البوت المُضاف إلى مجموعة يستقبل فقط الرسائل التي هي أوامر، أو ردود على رسائله الخاصة، أو إشارات إليه. هذا السلوك الافتراضي يسمى وضع الخصوصية وهو موجود لسبب وجيه.
يمكنك تعطيله بأمر /setprivacy في BotFather حتى يرى البوت كل رسالة في المجموعة. افعل ذلك فقط إذا كانت إحدى الميزات تحتاجه فعلًا. بمجرد تعطيله، يبدأ خادمك بتخزين محادثات أشخاص آخرين، وتصبح تلك المسؤولية مسؤوليتك أنت.
6. حدد معدلك ومعدل مستخدميك
يفرض Telegram حدوده الخاصة، وتجاوزها يؤدي إلى تقييدك أو حظرك مؤقتًا. الإرشاد العام من Telegram هو نحو 30 رسالة في الثانية عبر محادثات مختلفة، ونحو 20 رسالة في الدقيقة إلى نفس المجموعة. تعامل مع هذه الأرقام كسقوف يجب البقاء دونها بمسافة مريحة، لا كأهداف.
- ضع الرسائل الصادرة في طابور بدلًا من إرسالها في حلقة ضيقة.
- التزم بقيمة retry-after عندما يعيد الـ API استجابة 429، بدلًا من إعادة المحاولة فورًا.
- حدد المعدل لكل مستخدم أيضًا. شخص واحد يرسل أمرًا بشكل مزعج يجب ألا يستطيع رفع تكاليفك أو استنزاف حصتك.
- ضع فترة انتظار على كل ما هو مكلف، مثل استدعاءات نموذج ذكاء اصطناعي مدفوع أو خطوة توليد صور.
7. اجمع بيانات مستخدمين أقل
أكثر السجلات أمانًا هو ذلك الذي لم تحفظه قط. تراكم البوتات افتراضيًا معرّفات المحادثات والأسماء وأرقام الهواتف ومحتوى الرسائل، ومعظم ذلك لا يُستخدم أبدًا.
- احفظ معرّف المحادثة وما تحتاجه فعلًا. تجاهل الباقي.
- لا تسجّل نصوص الرسائل كاملة إلا إذا كان لديك سبب محدد وحد للاحتفاظ.
- حدد مدة احتفاظ واحذف وفق جدول زمني.
- شفّر الحقول الحساسة أثناء التخزين وقيّد من يستطيع الاستعلام عن قاعدة البيانات.
- ادعم طلبات الحذف. بموجب اللائحة العامة لحماية البيانات وقوانين مشابهة، يمكن للمستخدم أن يطلب منك إزالة بياناته، وتحتاج إلى طريقة لتنفيذ ذلك.
- وضّح ما تجمعه في سياسة خصوصية يمكن للبوت أن يربط إليها.
لاحظ أن أرقام الهواتف لا تصلك إلا إذا ضغط المستخدم على زر طلب مشاركة جهة اتصال. طلب رقم لا تحتاجه هو في الوقت نفسه تكلفة على التحويل ومسؤولية إضافية.
8. تحقق من بيانات Web App و Login Widget
إذا كان بوتك يفتح Telegram Web App أو كنت تستخدم Login Widget على موقع ويب، فإن بيانات المستخدم تصل مصحوبة بقيمة hash. تحقق من هذا الـ hash على خادمك باستخدام رمز بوتك قبل أن تثق بأي حقل واحد. تخطي هذا التحقق يعني أن بإمكان أي شخص أن ينتحل هوية أي مستخدم بتعديل الطلب.
9. راقب الأمور البسيطة أيضًا
- حدّث التبعيات. معظم الاختراقات الحقيقية تأتي عبر مكتبة، وليس عبر Telegram نفسه.
- قيّد من يستطيع النشر ومن يستطيع قراءة أسرار الإنتاج.
- راقب الأنماط غير المعتادة: ارتفاع مفاجئ في أمر واحد، رسائل من مستخدم واحد في حلقة ضيقة، طلبات تفشل في التحقق من الرمز السري.
- ضع خطة ليوم سيء. إلغاء الرمز، إيقاف الـ webhook، الاستعادة من نسخة احتياطية. اكتبها قبل أن تحتاجها.
قائمة التحقق
- الرمز موجود في متغيرات البيئة، وليس في git، ومُخفى في السجلات.
- تعرف كيف تنفّذ
/revokeفي BotFather. - الـ webhook يستخدم HTTPS ورمزًا سريًا تتحقق منه مع كل طلب.
allowed_updatesمضبوط فقط على ما تعالجه.- بيانات الـ callback تُعتمد على الخادم، ولا يُوثق بها كما وصلت.
- نص المستخدم يُعالج بالـ escape قبل عرضه في رسالة منسقة.
- أوامر الإدارة تتحقق من قائمة سماح لمعرّفات وتُسجَّل.
- وضع الخصوصية مفعّل ما لم تحتج إحدى الميزات تعطيله فعلًا.
- الرسائل الصادرة توضع في طابور وتُحترم استجابات 429.
- تحفظ الحد الأدنى، وتحذف وفق جدول زمني، وتستطيع تلبية طلب حذف.
- حمولات Web App و Login Widget يُتحقق منها عبر hash.
تجاوز الأجزاء التي عادة ما تسوء
مع TeleMinute يُخزَّن رمزك على الخادم، ويُدار الـ webhook نيابة عنك، ولا يوجد خادم خاص بك تتركه معرضًا. أنت تكتب المحادثة، ونحن ندير البنية التحتية.
ابدأ البناء اليومتابع القراءة
- دليل BotFather، بما في ذلك كيفية إلغاء رمز وتدويره
- أفضل ممارسات بوتات Telegram، قائمة التحقق الأوسع
- أفضل ممارسات UX لبوتات Telegram، لجانب التصميم
الأسئلة الشائعة
ماذا يحدث إذا تسرب رمز بوت Telegram الخاص بي؟
من يملكه يتحكم بالبوت بالكامل. يمكنه قراءة الرسائل الواردة، وإرسال رسائل باسمك، وتغيير الـ webhook الخاص بك حتى يتوقف خادمك عن استقبال التحديثات. لا توجد أي شاشة لطلب كلمة مرور تقف في طريقه.
كيف ألغي رمز بوت Telegram؟
افتح BotFather، أرسل أمر الإلغاء واختر البوت. يتوقف الرمز القديم عن العمل فورًا وتحصل على رمز جديد. إعادة كتابة سجل git لا تفيد، لأن الرمز المتسرب يُجمع خلال دقائق.
هل يرى بوتي كل رسالة في المجموعة؟
فقط إذا عطّلت وضع الخصوصية. افتراضيًا، يستقبل البوت في المجموعة الأوامر فقط، والردود على رسائله الخاصة، والإشارات المباشرة إليه. تعطيل وضع الخصوصية يعني أن خادمك يخزّن محادثات أشخاص آخرين.
هل أحتاج إلى رمز سري على الـ webhook الخاص بي؟
نعم. بدونه، يمكن لأي شخص يجد رابط الـ webhook الخاص بك أن ينشر تحديثات مزيفة تبدو تمامًا مثل حركة مرور Telegram الحقيقية. حدد الرمز السري عند تسجيل الـ webhook وارفض الطلبات التي لا يتطابق ترويستها معه.