
توضیحات
تزریقHTML نوعی دیگر از حملات تزریق است که بسیار شبیه به حمله XSS است، روش تزریق هم دقیقاً به همان صورت است و تفاوت این دو حمله این است که در حمله تزریق HTML محتوای تزریقشده صرفاً کدهای HTML میباشند.
این آسیبپذیری نسبت به XSS از خطر کمتری برخوردار است ولی همچنان میتواند عواقب و اثرات زیادی را در پی داشته باشد و برای اهداف خرابکارانه مورد استفاده قرار گیرد، برای مثال افشای کوکیهای نشست کاربر که میتواند برای جعل هویت قربانی مورد استفاده قرار گیرد، و یا میتواند به مهاجم اجازه دهد تا محتوای صفحه را که توسط قربانیان مشاهده میشود، تغییر دهد.
حمله تزریق HTML همانند حمله XSS دارای دو نوع reflected و stored میباشد. در نوع reflected کد مخرب HTML به طور دائم در وبسرور ذخیره نمیشود و وبسایت بلافاصله به ورودی مخرب پاسخ میدهد، اما در نوع stored کد مخرب HTML در سرور وب ذخیره میشود و هر بار که کاربر عملکرد مورد نظر را فراخوانی میکند، اجرا میشود.
این آسیبپذیری زمانی رخ میدهد که ورودی کاربر به درستی اعتبارسنجی نشده باشد و خروجی آن نیز کدگذاری نگردد. آسیبپذیری تزریق HTML به مهاجم اجازه میدهد تا یک صفحه HTML مخرب را برای قربانی ارسال کند و به علت اینکه مرورگر قربانی نمیتواند قسمتهای مجاز و صحیح را از قسمتهای مخرب متمایز کند، همه مواردی را که دریافت میکند به عنوان محتوای قانونی و مجاز اجرا میکند.
طیف گستردهای از روشها وجود دارد که برای ارائه محتوای HTML از آنها استفاده میشود ولی اگر این روشها دارای یک ورودی غیرقابل اعتماد و اعتبارسنجی نشده باشند، خطر حملات متعددی از جمله XSS و به ویژه تزریق HTML وجود دارد. برای مثال خاصیت innerHTML به صورت داخلی یک عنصر HTML را مقداردهی کرده و برمیگرداند. استفاده نادرست از این خاصیت، به معنای عدم اعتبارسنجی ورودی غیرقابل اعتماد و عدم کدگذاری خروجی میباشد و این موضوع به یک مهاجم اجازه میدهد تا کدهای مخرب HTML را تزریق کند.
به عنوان مثالی از یک قطعه کد آسیبپذیر، کدی در زیر آورده شده است که یک ورودی اعتبارسنجی نشده را برای ایجاد صفحات پویای HTML دریافت میکند:
var userposition=location.href.indexOf(“user=”);
var user=location.href.substring(userposition+5);
document.getElementById(“Welcome”).innerHTML=” Hello, “+user;
در این مثال یک ورودی مانند آنچه در زیر آورده شده است یک تگ به صفحه اضافه خواهد کرد که کدهای جاوااسکریپت دلخوه را اجرا خواهد کرد:
http://vulnerable.site/page.html?user=<img%20src=’aaa’%20onerror=alert(1)>
در ورودی بالا یک تگ img برای اضافهکردن تصویر به صفحه در ورودی قرار داده شده است که به علت اغتبارسنجی نشدن ورودی و عدم حذف کاراکترهای خاص HTML، میتواند کدهای خاص جاوااسکریپت را که توسط مهاجم نوشته شده است در درون صفحه HTML اجرا کند.
راهحل و پیشگیری
- از پارامتریسازی استفاده کنید و مستقیماً داده ورودی کاربر را در صفحات و تگهای HTML قرار ندهید.
- از لیستسفید در سمتسرور برای اعتبارسنجی ورودیها استفاده کنید.
- از ساختار escape برای کاراکترهای خاص HTML در ورودی کاربر استفاده کنید.
- در صورت امکان از فایروالهای برنامههای تحت وب استفاده کنید.
- در صورت استفاده از فایروالها آنها را برای کنترل ترافیک خروجی نیز تنظیم کنید.
- از یک صفحه پیغام عمومی برای نمایش خطاها استفاده کنید.
منابع