KavLabs
خانهبلاگ
KavLabs

یادداشت‌هایی از ذهن‌های کاوشگر، برای ذهن‌های کنجکاو

پرهام·پرهام·زال·زال·
· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
نوشته‌هادسته‌بندی‌هاجستجوی پیشرفتهلاگ تغییرات

©۲٬۰۲۶ KavLabs — تمام حقوق محفوظ است

ساخته‌شده با عشق توسط پرهام و زال

واژه‌نامه
۰۷ اسفند ۱۴۰۴مبانی وبمبتدیزبان: فارسی

نقطه پایانی

مبتدینسخه انگلیسی

یک URL خاص که در آن می‌توان به یک API یا سرویس دسترسی پیدا کرد تا عملی انجام شود یا داده‌ای بازیابی شود.

apiنقطه-پایانیurlrestوب

تعریف کوتاه

نقطه پایانی یک آدرس خاص (URL) است که می‌توانید با یک API صحبت کنید. مثلاً /api/users نقطه پایانی برای دریافت کاربران است، /api/login برای ورود. هر نقطه پایانی یک کار خاص انجام می‌دهد.

تعریف کامل

نقطه پایانی یک مسیر URL خاص است که API عملکرد خود را از طریق آن ارائه می‌دهد. این نقطه اتصال بین کلاینت و سرور برای یک عملیات خاص است.

ساختار:

bash
1Base URL + Path = Endpoint
2
3https://api.example.com/v1/users/123
4│ │ │
5│ │ └─ مسیر نقطه پایانی
6│ └─ نسخه API
7└─ Base URL

مثال نقاط پایانی REST API:

bash
1GET /api/users ← فهرست همه کاربران
2GET /api/users/123 ← دریافت کاربر خاص
3POST /api/users ← ایجاد کاربر جدید
4PUT /api/users/123 ← به‌روزرسانی کاربر
5DELETE /api/users/123 ← حذف کاربر

انواع:

  • عمومی: هر کسی می‌تواند دسترسی داشته باشد
  • احراز هویت شده: نیاز به ورود/توکن دارد
  • داخلی: فقط برای سرویس‌های داخلی
  • Webhook: اعلان‌ها را دریافت می‌کند

چرا مهم است

  • نقاط پایانی تعیین می‌کنند API شما چه کاری می‌تواند انجام دهد
  • هر نقطه پایانی یک سطح حمله بالقوه است
  • طراحی مناسب نقطه پایانی بر امنیت تأثیر می‌گذارد
  • شمارش نقاط پایانی عملکرد را آشکار می‌کند
  • کنترل دسترسی باید به ازای هر نقطه پایانی باشد

چگونه مهاجمان از آن استفاده می‌کنند

تکنیک‌های حمله:

۱. شمارش نقاط پایانی: یافتن نقاط پایانی پنهان که در مستندات نیستند:

bash
1/api/users ← عمومی
2/api/users/admin ← پنهان؟
3/api/internal/ ← داخلی؟
4/api/v2/ ← نسخه منتشرنشده؟

ابزارها: ffuf، gobuster، Burp Intruder

۲. IDOR (مرجع مستقیم ناامن شی):

bash
1GET /api/users/123 ← ID شما
2GET /api/users/124 ← داده شخص دیگر

۳. SSRF از طریق نقطه پایانی:

bash
1POST /api/webhook
2{
3 "url": "http://169.254.169.254/metadata"
4}

۴. تخصیص انبوه:

bash
1POST /api/users
2{
3 "username": "attacker",
4 "password": "pass",
5 "role": "admin" ← نباید مجاز باشد
6}

۵. بهره‌برداری از نسخه:

bash
1/api/v1/users ← وصله شده
2/api/v0/users ← نسخه قدیمی و آسیب‌پذیر هنوز فعال است

چگونه تشخیص یا پیشگیری کنیم

پیشگیری:

طراحی:

  • استفاده از نسخه‌بندی (/v1/, /v2/)
  • قراردادهای نام‌گذاری یکسان
  • مستندات واضح
  • غیرفعال کردن نقاط پایانی استفاده‌نشده
  • حذف نقاط پایانی دیباگ/تست در تولید

امنیت:

  • احراز هویت در همه نقاط پایانی
  • بررسی مجوز (نه فقط احراز هویت)
  • محدودیت نرخ به ازای هر نقطه پایانی
  • اعتبارسنجی ورودی
  • غیرفعال کردن متدهای HTTP غیرضروری (مثلاً DELETE اگر فقط خواندنی است)

نمونه کد:

python
1@app.route('/api/users/<int:user_id>', methods=['GET'])
2@require_authentication
3def get_user(user_id):
4 # بررسی مجوز
5 if current_user.id != user_id and not current_user.is_admin:
6 return {"error": "Unauthorized"}, 403
7
8 # دسترسی تأیید شده
9 user = User.query.get(user_id)
10 return jsonify(user)

تشخیص:

  • ثبت تمام دسترسی‌ها به نقاط پایانی
  • نظارت بر الگوهای شمارش:
    • تلاش‌های متوالی ID
    • خطاهای ۴۰۴ ناشی از اسکن
    • درخواست به نقاط پایانی مستندنشده
  • هشدار در مورد دسترسی به نقاط پایانی حساس
  • ردیابی متدهای HTTP غیرعادی (OPTIONS، TRACE)

باورهای غلط رایج

  • "احراز هویت از همه نقاط پایانی محافظت می‌کند" - نیاز به مجوز هم هست
  • "نقاط پایانی پنهان امن هستند" - امنیت از طریق ابهام شکست می‌خورد
  • "مستندات بیش از حد فاش می‌کند" - مهاجمان به هر حال شمارش می‌کنند
  • "نقاط پایانی می‌توانند احراز هویت مشترک داشته باشند" - هر کدام نیاز به بررسی خود دارند
  • "نقاط پایانی GET فقط خواندنی هستند" - برخی به اشتباه وضعیت را تغییر می‌دهند

مثال واقعی

API Informed Delivery USPS (۲۰۱۸)

آسیب‌پذیری:

bash
1GET /account/profile?userId=12345

مشکل: عدم بررسی مجوز

حمله: ۱. ایجاد حساب (دریافت userId=12345) ۲. امتحان userId=12346، 12347 و غیره ۳. دسترسی به ۶۰ میلیون حساب کاربری

نتیجه: نام کامل، آدرس، ایمیل، شماره تلفن افشا شد.

API Peloton (۲۰۲۱)

نقطه پایانی داده زیادی افشا کرد:

bash
1GET /api/user/{user_id}/profile

برگرداند:

  • اطلاعات خصوصی پروفایل
  • تاریخچه تمرین
  • داده موقعیت مکانی
  • حتی برای حساب‌های "خصوصی"

می‌توانست با تکرار user_id همه کاربران را شمارش کند.

API Venmo

نقطه پایانی عمومی بدون احراز هویت:

bash
1GET /api/transactions

افشا کرد:

  • تمام تراکنش‌های عمومی
  • روابط کاربران
  • الگوهای مالی
  • می‌توانست میلیون‌ها تراکنش را استخراج کند

اصطلاحات مرتبط

API, URL, HTTP Request, REST, Authentication

منابع و مراجع

  • www.ibm.com/topics/api-endpoint

مفاهیم مرتبط

رابط برنامه‌نویسی کاربردی(API)

مجموعه‌ای از قوانین و نقاط پایانی که به نرم‌افزارهای مختلف اجازه می‌دهد با یکدیگر صحبت کنند، مانند منویی از توابع قابل استفاده.

نشانی وب(URL)

آدرس وب که مکان یک منبع را در اینترنت مشخص می‌کند، مانند https://example.com/page.

درخواست HTTP(HTTP)

پیامی که توسط کلاینت به سرور ارسال می‌شود و درخواست یک منبع یا اقدام را دارد، و از قوانین پروتکل HTTP استاندارد پیروی می‌کند.