‹ بازگشت به کتابخانه‌ی رایت‌آپ‌ها
Clickjacking شدت: متوسط

دور زدن JavaScript Frame-Busting قدیمی با sandbox

چرا کد جاوااسکریپتی که سعی می‌کند از طریق top.location خودش را از iframe آزاد کند، یک دفاع واقعی نیست.

نویسنده: تیم PentesterHub

قبل از استاندارد شدن X-Frame-Options، سایت‌ها با کدی شبیه if (top != self) top.location = self.location; سعی می‌کردند از frame شدن جلوگیری کنند. اما مهاجم می‌تواند iframe را با ویژگی sandbox="allow-forms" (بدون allow-scripts) بسازد؛ در این حالت هیچ جاوااسکریپتی داخل iframe (از جمله همین کد frame-busting) اجرا نمی‌شود، و دفاع کاملاً بی‌اثر می‌شود.

درس کلی

هر دفاع امنیتی که صرفاً سمت کلاینت و با جاوااسکریپت اجرا شود، توسط کنترل مهاجم روی محیط اجرای آن کد (iframe sandbox) قابل‌خلع‌سلاح است.

راه‌حل

فقط به هدرهای HTTP (X-Frame-Options / CSP) که توسط مرورگر *قبل* از اجرای هر جاوااسکریپت اعمال می‌شوند، اعتماد شود.

تمرین عملی در آزمایشگاه‌های Clickjacking ›