کلیک جکینگ یا کلیک دزدی چیست:
Click Jacking یا کلیک دزدی یک روش جهت فریب دادن کاربران وبسایت برای کلیک کردن روی لینک مخرب است. – به صورتی که لینک موجه جلوه میکند –
فرض کنید شما صاحب وبسایتی هستید که ویدئوهای مربوط به موضوع مشخصی را یکجا جمع و به نمایش میگذارید. در نتیجه وبسایت شما هدف خوبی برای خرابکارها جهت کلیک دزدی است.
خرابکارها یک آدرس شبیه آدرس وبسایت (URL) شما ثبت میکنند و وبسایت شما را در قالب یک iframe در صفحه وب خود میآورند.
<html>
<head>
<style>
body {
position: relative;
margin: 0;
}
iframe {
border: none;
position: absolute;
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<iframe src="YOUR URL">
</iframe>
</body>
</html>
سپس یک div با قابلیت شفاف روی این iframe -به وسیله z-index- قرار میدهند:
<html>
<head>
<style>
body {
position: relative;
margin: 0;
}
iframe, div {
border: none;
position: absolute;
width: 100%;
height: 100%;
}
div {
z-index: 100;
}
</style>
</head>
<body>
<iframe src="YOUR URL">
</iframe>
<div></div>
</body>
</html>
در مرحله بعد این div شفاف را به آدرس مشخصی لینک میدهند :
<div>
<a href="specific url"></a>
</div>
در نتیجه کاربری که به قصد تماشای ویدئو که گمان میبرد در وبسایت شما است، روی ویدئو کلیک میکند و بر حسب لینکی که خرابکار روی div قرار داده ممکن است وارد یک سایت مخرب شود، یک فایل آلوده به ویروس یا بدافزار را دانلود کند و غیره.
همانطور که خواندیم، کلیک جکینگ یا کلیک دزدی به صورت مستتقیم وبسایت شما را آلوده نمیکند، اما کاربران شما را به خطر میاندازد.
راههای محافظت از کلیک دزدی :
۱- از طریق گزینه X-Frame-Options :
همانطور در کدهای بالا دیدیم، خرابکاران از طریق iframe وبسایت هدف را در وبسایت خود وارد میکنند. بنابراین برای محافظت از کاربران وبسایتمان، نباید اجازه دهیم وبسایتمان در iframe نمایش داده شود. برای این کار باید به مرورگر دستورالعمل لازم را از طریق HTTP headers بدهیم.
گزینه X-Frame-Options در HTTP headers برای این مورد استفاده قرار میگیرد که آیا وبسایت شما میتواند در تگ frame یا iframe نمایش داده شود یا خیر. در حقیقت این گزینه برای حفاظت از کلیک دزدی طراحی شده است. برای این منظور باید فایل کانفیگ HTTP سرورتان برای مثال Apache, NGinx, IIS و غیره را ویرایش کنید.
گزینه X-Frame-Options شامل سه value است :
- DENY : صفحه نمیتواند در iframe نمایش داده شود.
- SAMEORIGIN : صفحه میتواند در iframe فقط در وبسایت اصلی نمایش داده شود.
- ALLOW-FROM *uri* : صفحه میتواند در iframe فقط در وبسایتهای مشخص شده نمایش داده شود.
۲- از طریق Content-Security-Policy :
گزینه Content-Security-Policy در HTTP Header از استانداردهای HTML5 است. یکی از کاراییهای این گزینه برای مشخص کردن وبسایتهایی هستند که اجازه دارند وبسایت اصلی را Embed کنند.
برای کنترل اینکه وبسایت شما قابل Embed کردن است یا خیر، باید از frame-ancestors استفاده کنید :
- Content-Security-Policy: frame-ancestors ‘none ‘ : صفحه نمیتواند در iframe نمایش داده شود.
- Content-Security-Policy: frame-ancestors ‘self’ : صفحه میتواند در iframe فقط در وبسایت اصلی نمایش داده شود.
- Content-Security-Policy: frame-ancestors *uri* : صفحه میتواند رد iframe فقط در وبسایتهای مشخص شده نمایش داده شود.
۳- از طریق Frame-Killing:
در مرورگرهای قدیمی یکی از راههای جلوگیری از کلیک دزدی استفاده از جاوا اسکریپت Frame-Killing بود تا اجازه ندهد وبسایت در iframe ها نمایش داده شود.
<style>
/* Hide page by default */
html { display : none; }
</style>
<script>
if (self == top) {
// Everything checks out, show the page.
document.documentElement.style.display = 'block';
} else {
// Break out of the frame.
top.location = self.location;
}
</script>
این اسکریپت هنگام بارگذاری صفحه، چک میکند که آیا دامنه صفحه با دامنه پنجره مرورگر یکسان است یا خیر. اگر صفحه داخل یک iframe باشد یعنی دامنه صفحه با دامنه پنجره مرورگر یکی نیست و صفحه نمایش داده نمیشود.
با آگاهی از راه و روشهای خرابکارن برای فریب دادن کاربران است که میتوانیم جلوی آنها را بگیریم.