در حال بارگذاری...
تست آسیبپذیری Cross-Site Scripting مبتنی بر DOM که در آن اسکریپت مخرب در سمت کلاینت از طریق DOM اجرا میشود.
اهداف این درس
آسیبپذیری XSS مبتنی بر DOM زمانی رخ میدهد که اسکریپت سمت کلاینت دادههای کنترلشده توسط مهاجم را در DOM پردازش کند. برخلاف Reflected و Stored XSS، این آسیبپذیری کاملاً در سمت کلاینت رخ میدهد.
نوعی XSS که در آن اسکریپت مخرب از طریق پردازش ناامن DOM در مرورگر اجرا میشود.
| منابع (Sources) | خروجیها (Sinks) | خطر |
|---|---|---|
| document.location | innerHTML | بالا |
| document.URL | eval() | بسیار بالا |
| window.name | document.write() | بالا |
| location.hash | setTimeout(string) | متوسط |
| location.search | jQuery.html() | بالا |
تمام منابع داده در کد JavaScript را شناسایی کنید: document.location، document.URL، window.name، location.hash و location.search.
جریان داده از منبع تا خروجی را ردیابی کنید. آیا داده قبل از استفاده در خروجی، اعتبارسنجی یا خروجیگیری میشود؟
1// از طریق hash2http://target.com/page#<img src=x onerror=alert(1)>34// از طریق search5http://target.com/page?q=<img src=x onerror=alert(1)>67// از طریق window.name8window.name = "<img src=x onerror=alert(1)>"هشدار
هرگز از innerHTML با دادههای کنترلشده توسط کاربر استفاده نکنید. از textContent یا createElement استفاده کنید.
توصیه عملی
از ابزار DOM Invader در Burp Suite برای شناسایی خودکار DOM-based XSS استفاده کنید.
DOM-based XSS کاملاً در سمت کلاینت رخ میدهد.
منابع (Sources) و خروجیها (Sinks) را شناسایی کنید.
از innerHTML استفاده نکنید؛ از textContent استفاده کنید.
خروجیگیری مناسب مؤثرترین روش پیشگیری است.
کدام متد JavaScript خطرناک است و میتواند منجر به DOM-based XSS شود؟
تفاوت DOM-based XSS با Reflected XSS چیست؟
در DOM-based XSS، اسکریپت کاملاً در سمت کلاینت اجرا میشود و داده به سرور ارسال نمیشود. در Reflected XSS، داده به سرور ارسال و در پاسخ بازتاب داده میشود.
Sink و Source در DOM-based XSS چیست؟
Source منبع ورودی داده (مثل document.location) و Sink محل استفاده از داده (مثل innerHTML) است.