با سلام خدمت تمام کاربران عزیز،
در این مقاله قصد داریم یکی از شایع ترین باگهایی که برنامهنویسان رباتهای تلگرامی با آن مواجه هستند را بیان کرده و راه حل های رفع این باگ را توضیح دهیم.
باگ آپدیت فیک تلگرام چیست؟
اگر ربات تلگرامی شما از متد ست وبهوک (setwebhook) برای دریافت آپدیتها و ارسال پاسخ به آنها استفاده میکند، امکان دارد ربات شما در معرض خطر باگ آپدیت فیک باشد.
در این رابطه اگر آدرس دامنهای که ربات شما بر روی آن ستوبهوک شده است لو برود، مهاجمان میتوانند دیتای مورد نظر خود را به آن آدرس پست کنند (دقیقا کاری که تلگرام برای ارسال آپدیت انجام میدهد) و اسکریپت شما آن آپدیت را به عنوان یک آپدیت تلگرامی پردازش کند.
آیا ارسال آپدیت فیک خطرناک است؟
در حالت کلی بله، زیرا در آپدیت فیک کاربر میتواند دیتای دلخواه خود را برای ربات شما ارسال کند.
رباتهای تلگرامی از آیدی عددی کاربران آنها را شناسایی میکنند، پس مهاجم میتواند با ویرایش آیدی عددی کاربر در آپدیت فیک، از طرف هر کاربر دلخواهی متن دلخواه را برای ربات ارسال کند، این موضوع وابسته به نوع کدنویسی و کارکرد و همچنین موضوع فعالیت ربات شما میتواند کاملا خطرناک یا بیخطر باشد.
به عنوان مثال فرض کنید ربات شما دارای پنل ادمین باشد و در پنل ادمین امکان ارسال پیام همگانی به کاربران وجود داشته باشد، همچنین مهاجم آیدی عددی شما را به عنوان ادمین ربات داشته باشد. آن زمان میتواند از طرف شما برای تمام کاربران پیام همگانی ارسال کند!
چگونه از دریافت آپدیت فیک جلوگیری کنیم؟
راههای زیادی برای جلوگیری از دریافت آپدیت فیک وجود دارد که موارد رایجتر را برای شما بیان خواهیم کرد:
۱- آدرس ستوبهوک ربات را امن و مخفی نگه دارید
یکی از روشهایی که تعدادی از کاربران از آن استفاده میکنند، مخفی نگه داشتن آدرس ستوبهوک ربات است. طبیعی است اگر مهاجم آدرس وبهوک ربات را نداشته باشد، قطعا نمیتواند برای ربات آپدیت فیک ارسال کند.
به عنوان مثال کاربران محتوای ربات خود را بر روی پوشهای با اسم رندم (مثلا palctrcuxireb) آپلود میکنند، تا حتی اگر آدرس دامنهی آنها در دسترس عموم بود، آدرس ربات آنها مخفی و غیرقابل حدس باشد.
پیشنهاد میکنیم در صورتی که تصمیم به انجام این روش گرفتید، حتما یکی از روشهای بعدی را هم جهت تکمیل امنیت ربات خود انجام دهید.
۲- دسترسی به فایلها را از طریق فایل htaccess محدود کنید
تلگرام رنج آیپیهایی که با آن آپدیتهای ربات را برای شما ارسال میکند مشخص کرده است.
در اینجا (کلیک کنید) میتوانید رنج آیپیها را مشاهده کنید. در زمان تایپ این مقاله رنج آیپیهای تلگرام برابر با 149.154.160.0/20 و 91.108.4.0/22 بودهاست.
برای انجام این کار:
الف) در پوشهی ربات خود فایلی با نام htaccess. ایجاد کنید (ابتدا یک نقطه و سپس عبارت htaccess با حروف کوچک)
ب) کد زیر را درون این فایل قرار دهید و سپس فایل را ذخیره کرده و ببندید:
Order Deny,Allow
Deny from all
Allow from 91.108.4/22
Allow from 149.154.160/20
با انجام این کار، سرور شما فقط به رنج آیپیهای ذکر شده اجازه میدهد تا به فایلهای درون این پوشه دسترسی داشته باشند و سایرین با خطای ۴۰۳ مواجه خواهند شد.
همچنین با کد زیر شما میتوانید برای فایلهای دلخواه خود در آن پوشه این محدودیت را اعمال کنید، طوری که فقط دسترسی به فایلهای انتخاب شده محدود باشد و در دسترسی به سایر فایلها محدودیتی وجود نداشته باشد:
<FilesMatch "(file1.php|file2.php|file3.php)">
Order Deny,Allow
Deny from all
Allow from 91.108.4/22
Allow from 149.154.160/20
</FilesMatch>
۳- آیپی درخواست دهنده را در فایل پیاچپی خود اعتبارسنجی کنید (پیشنهادی)
یکی دیگر از راههای موثر در جلوگیری از آپدیت فیک، بررسی آیپی درخواست دهنده در فایل پیاچپی است. در این روش شما با داشتن آیپی دستگاه درخواست دهنده و مقایسهی آن با رنج آیپی تلگرام، میتوانید متوجه شوید که آپدیت از سمت تلگرام ارسال شده است یا خیر! برای این کار در فراهاست برای شما تابعی آماده شده است که میتوانید از آن برای تشخیص اصالت آپدیت ارسالی استفاده کنید:
function checkRemoteIPisTelegram()
{
$tg_ip_ranges = [
['lower' => '149.154.160.0', 'upper' => '149.154.175.255'],
['lower' => '91.108.4.0', 'upper' => '91.108.7.255'],
];
$ip_dec = (float) sprintf("%u", ip2long($_SERVER['REMOTE_ADDR']));
foreach ($tg_ip_ranges as $tg_ip_range) {
$lower_dec = (float) sprintf("%u", ip2long($tg_ip_range['lower']));
$upper_dec = (float) sprintf("%u", ip2long($tg_ip_range['upper']));
if ($ip_dec >= $lower_dec and $ip_dec <= $upper_dec)
return true;
}
return false;
}
پس از تعریف این تابع میتوانید در ابتدای فایل پیاچپی خود آیپی درخواستدهنده را به شکل زیر اعتبار سنجی کنید:
if(!checkRemoteIPisTelegram())
die('You are not Telegram');
امیدواریم این مقاله به شما در شناخت آپدیت فیک و نحوهی جلوگیری از آن کمک کرده باشد.