KavLabs
خانهبلاگ
KavLabs

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

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

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

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

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

نشانی وب(URL)

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

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

urlوبhttpپروتکلآدرس

تعریف کوتاه

URL متنی است که در نوار آدرس مرورگر می‌بینید و به مرورگر می‌گوید چیزی را کجا در اینترنت پیدا کند. https://example.com/products/123 می‌گوید: از پروتکل HTTPS استفاده کن، برو به example.com، بخش محصولات را پیدا کن، آیتم ۱۲۳ را بگیر.

تعریف کامل

URL (آدرس وب) آدرس کامل برای دسترسی به یک منبع در وب است.

ساختار URL:

bash
1https://user:pass@www.example.com:443/path/to/page?key=value#section
2│ │ │ │ │ │ │ │
3│ │ │ │ │ │ │ └─ بخش
4│ │ │ │ │ │ └─ پرس‌وجو
5│ │ │ │ │ └─ مسیر
6│ │ │ │ └─ پورت
7│ │ │ └─ دامنه (نام میزبان)
8│ │ └─ اعتبارنامه (منسوخ شده)
9│ └─ پروتکل (طرح)
10└─ https://

اجزا:

پروتکل: نحوه دسترسی (http، https، ftp، file)

دامنه: کجا برویم (example.com)

پورت: کدام سرویس (۸۰=HTTP، ۴۴۳=HTTPS)

مسیر: چه منبعی (/products/123)

پرس‌وجو: پارامترها (?color=red&size=large)

بخش: بخش صفحه (#reviews)

چرا مهم است

  • هر درخواست وب با یک URL شروع می‌شود
  • URLها کنترل می‌کنند داده کجا می‌رود
  • ساختار URL بر امنیت تأثیر می‌گذارد
  • موتورهای جستجو به URLهای تمیز وابسته هستند
  • APIها از URLها به عنوان رابط استفاده می‌کنند

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

حملات مبتنی بر URL:

۱. تزریق/دستکاری URL:

bash
1# اصلی
2https://bank.com/transfer?to=user1&amount=100
3
4# مهاجم تغییر می‌دهد
5https://bank.com/transfer?to=attacker&amount=10000

۲. SSRF از طریق URL:

bash
1# عادی
2https://site.com/fetch?url=https://cdn.example.com/image.jpg
3
4# مخرب
5https://site.com/fetch?url=http://169.254.169.254/metadata

۳. تغییر مسیر باز:

bash
1https://trusted.com/redirect?url=http://evil.com

۴. پیمایش مسیر:

bash
1https://site.com/download?file=../../../etc/passwd

۵. سردرگمی تجزیه‌گر URL:

bash
1http://evil.com@trusted.com ← کدام دامنه؟
2http://trusted.com.evil.com ← ترفند زیردامنه

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

پیشگیری:

  • URLها را به طور کامل اعتبارسنجی کنید
  • از کتابخانه‌های تجزیه URL استفاده کنید (نه regex)
  • لیست سفید دامنه‌های مجاز
  • پس از جستجوی DNS، IP حل شده را بررسی کنید
  • کاراکترهای خاص را به درستی کدگذاری کنید
  • در صورت امکان از URLهای نسبی استفاده کنید
  • اعتبارنامه‌های URL را در برنامه‌های مدرن غیرفعال کنید

به طور خاص برای SSRF:

python
1from urllib.parse import urlparse
2import socket
3
4def is_safe_url(url):
5 parsed = urlparse(url)
6
7 # بررسی پروتکل
8 if parsed.scheme not in ['http', 'https']:
9 return False
10
11 # بررسی لیست سفید دامنه
12 if parsed.hostname not in ALLOWED_DOMAINS:
13 return False
14
15 # بررسی IP حل شده
16 try:
17 ip = socket.gethostbyname(parsed.hostname)
18 if is_private_ip(ip):
19 return False
20 except:
21 return False
22
23 return True

تشخیص:

  • ثبت تمام URLهای پردازش شده توسط برنامه
  • هشدار در مورد الگوهای مشکوک:
    • آدرس‌های IP خصوصی
    • IPهای سرویس متادیتا
    • کدگذاری دوگانه
    • پروتکل‌های غیرعادی (gopher, file)
    • طول بیش از حد URL

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

  • "اعتبارسنجی URL ساده است" - تفاوت‌های تجزیه‌گر مشکل ایجاد می‌کند
  • "URLهای HTTPS همیشه ایمن هستند" - همچنان می‌توانند به محتوای مخرب اشاره کنند
  • "دامنه در URL واضح است" - حملات سردرگمی تجزیه‌گر وجود دارد
  • "کدگذاری URL از حملات جلوگیری می‌کند" - مهاجمان نیز از آن استفاده می‌کنند
  • "URLها نمی‌توانند اعتبارنامه داشته باشند" - می‌توانند (منسوخ شده اما کار می‌کند)

مثال واقعی

SSRF در GitHub (۲۰۱۷)

پروکسی تصویر GitHub URLها را می‌پذیرفت:

bash
1https://github.com/proxy?url=...

هدف: فقط تصاویر خارجی

آسیب‌پذیری: عدم اعتبارسنجی مقصد

بهره‌برداری:

bash
1url=http://127.0.0.1:6379/

نتیجه: به سرور Redis داخلی دسترسی پیدا کرد، دستورات اجرا کرد.

سردرگمی تجزیه‌گر URL - موارد متعدد

کتابخانه‌های مختلف یک URL را متفاوت تجزیه می‌کنند:

bash
1http://evil.com@good.com
2
3PHP parse_url(): میزبان = good.com
4Python requests: میزبان = evil.com

اعتبارسنج good.com را می‌بیند (عبور می‌کند)، فرستنده به evil.com متصل می‌شود (دور زده شد).

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

URI, Domain, Endpoint, HTTP Request, URL Parser

منابع و مراجع

  • developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_URL

مفاهیم مرتبط

نام دامنه

آدرس قابل خواندن برای انسان مانند example.com که به یک آدرس IP نگاشت می‌شود و به خاطر سپردن مکان وب‌سایت‌ها را آسان‌تر می‌کند.

نقطه پایانی

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

درخواست HTTP(HTTP)

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