# گزارش بررسی امنیت و پایداری سورس

## موارد بحرانی

1. **اطلاعات حساس در `config.php`**: توکن ربات، رمز دیتابیس و کلیدهای API باید پس از تحویل سورس تعویض شوند و بهتر است در متغیر محیطی نگهداری شوند.
2. **SQL Injection گسترده**: بخش زیادی از `bot.php` و فایل‌های پرداخت داده کاربر را مستقیم داخل SQL قرار می‌دهد. ماژول جدید از Prepared Statement استفاده می‌کند، اما کل سورس برای امن‌شدن کامل باید بازنویسی شود.
3. **پرداخت قابل دست‌کاری**: مبلغ و شناسه کاربر از Query String گرفته می‌شود و ارتباط رمزنگاری‌شده بین شروع پرداخت و Callback وجود ندارد. مبلغ باید از رکورد سفارش سمت سرور خوانده شود، نه از درخواست مرورگر.
4. **Race Condition موجودی**: کم‌کردن و اضافه‌کردن موجودی بدون تراکنش و قفل رکورد انجام می‌شود؛ درخواست هم‌زمان می‌تواند موجودی اشتباه ایجاد کند.
5. **ذخیره کد و شماره در متن ساده**: سابقه خرید و کدها در ستون `listby` ذخیره می‌شوند. کدهای ورود نباید در دیتابیس یا لاگ ماندگار شوند.

## موارد مهم

- `error_reporting(0)` تمام خطاهای واقعی را مخفی می‌کند.
- در ابتدای `bot.php` چند متغیر قبل از مقداردهی استفاده شده‌اند و ورودی وب‌هوک دوبار Parse می‌شود.
- `mkdir("data/$from_id")` بدون کنترل معتبر بودن شناسه و وجود مسیر اجرا می‌شود.
- بررسی IP تلگرام به‌تنهایی شکننده است؛ بهتر است Webhook Secret Token نیز بررسی شود.
- بسیاری از درخواست‌های HTTP فاقد Timeout کامل، بررسی HTTP Status و مدیریت خطا هستند.
- API قدیمی 5sim به‌صورت شبیه‌ساز SMS-Activate استفاده شده، در حالی که API فعلی 5sim ساختار Bearer Token و endpointهای `/v1/user/...` دارد.
- فایل‌های پرداخت با `include('../bot.php')` کل منطق وب‌هوک را اجرا می‌کنند و معماری را به‌شدت شکننده کرده‌اند.
- `install.php` ورودی‌ها را مستقیماً داخل کد PHP تولید می‌کند؛ با کوتیشن یا محتوای خاص امکان خراب‌شدن یا تزریق تنظیمات وجود دارد.
- لیست کشورها و سرویس‌ها چندین بار به‌صورت رشته‌های عظیم تکرار شده و خطاهای encoding دارد؛ باید به جدول یا فایل تنظیمات منتقل شود.

## اصلاحات انجام‌شده در این بسته

- افزودن مدیریت شماره دستی با کنترل دسترسی عددی ادمین
- Prepared Statement در تمام Queryهای ماژول جدید
- تراکنش و `SELECT ... FOR UPDATE` هنگام واگذاری/آزادسازی
- ثبت Audit Log برای تمام تغییرات شماره دستی
- اعتبارسنجی E.164 برای شماره‌ها
- جلوگیری از حذف شماره واگذارشده
- اصلاح overwrite شدن `blocklist.txt` و تبدیل آن به append قفل‌شده
- ساخت خودکار `data/sod2.txt`

## پیشنهاد بازطراحی بعدی

سورس اصلی بهتر است به چند لایه جدا تقسیم شود: Webhook Controller، Telegram Client، Provider Client، Order Service، Payment Service، Repository و Admin Panel. بدون این بازطراحی، اصلاح کامل تمام نقاط تزریق و خطاهای هم‌زمانی بسیار پرریسک است.

## نتیجه اسکن ایستا

در فایل‌های PHP الگوهای رایج Backdoor مانند `eval(base64_decode(...))`، `gzinflate`، `shell_exec` و Webshell مشاهده نشد. این نتیجه فقط اسکن ایستا است و تضمین قطعی نبود کد مخرب یا رفتار ناخواسته در سرویس‌های خارجی نیست.

## محدوده تست

تمام فایل‌های PHP با `php -l` بررسی شدند و خطای Syntax ندارند. ماژول شماره دستی با تست‌های کمکی برای نرمال‌سازی E.164 و کنترل دقیق ادمین بررسی شد. تست End-to-End روی دیتابیس واقعی، APIهای 5sim/SMS-Activate، وب‌هوک تلگرام و درگاه پرداخت انجام نشده، چون اعتبارنامه و محیط عملیاتی در دسترس نبود.
