أمان iframe: Clickjacking وX-Frame-Options
منع هجمات Clickjacking باستخدام X-Frame-Options وCSP
أمان iframe: Clickjacking وX-Frame-Options درس مجاني في HTML Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في HTML Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة HTML Academy 4 دروس في المجموع.
ما هو اختطاف النقرات (Clickjacking)؟
يضمّن اختطاف النقرات (Clickjacking)، المعروف أيضاً بإعادة تصميم واجهة المستخدم، موقعاً مستهدفاً داخل iframe شفاف موضوع فوق صفحة طُعم. يظن المستخدم أنه ينقر على صفحة الطُعم، لكنه ينقر فعلياً على الصفحة المخفية والمصادق على دخوله إليها أسفلها، فينفّذ إجراءات على الموقع المستهدف من دون علمه.
آلية هجوم اختطاف النقرات
يحمّل المهاجم victim.com داخل iframe شفاف موضوع فوق زر "انقر للربح!". عندما ينقر المستخدم، ينقر فعلياً على زر "حذف الحساب" في victim.com، مع تسجيل دخوله بحسابه من خلال ملف جلسة victim.com. ولا حاجة إلى التصيد الاحتيالي.
رأس X-Frame-Options
يمنع X-Frame-Options: DENY تحميل الصفحة داخل أي iframe. ويسمح X-Frame-Options: SAMEORIGIN بالتضمين داخل iframe للصفحات ذات الأصل نفسه فقط. اضبط هذا الرأس من جهة الخادم على جميع الصفحات التي تتطلب تسجيل الدخول لمنع اختطاف النقرات.
frame-ancestors في Content-Security-Policy
يُعد Content-Security-Policy: frame-ancestors 'none' البديل الحديث والأكثر مرونة لـ X-Frame-Options: DENY. ويحل frame-ancestors 'self' محل SAMEORIGIN. ويمكن لـ frame-ancestors أيضاً السماح بمصادر موثوقة محددة: frame-ancestors https://trusted.example.com.
كسر الإطارات باستخدام JavaScript
كان كسر الإطارات قديماً يعتمد على JavaScript للخروج من الإطارات. ويمكن التحايل على هذه الأساليب بسهولة باستخدام السمة sandbox، التي تحظر نص كسر الإطار. استخدم دائماً الرؤوس من جهة الخادم (X-Frame-Options أو CSP frame-ancestors)، فكسر الإطارات باستخدام JavaScript غير موثوق.
متى يُسمح بالتضمين داخل الإطارات
تشمل حالات الاستخدام المشروعة للتضمين داخل الإطارات: تضمين المحتوى الخاص بك على الأصل نفسه (SAMEORIGIN)، والسماح لشريك محدد بتضمين widget الخاص بك (باستخدام frame-ancestors مع أصل محدد). صمّم السياسة للسماح بهذه الحالات ومنع جميع الحالات الأخرى.
النهج المدمج
اضبط كلاً من X-Frame-Options (للمتصفحات الأقدم) وCSP frame-ancestors (للمتصفحات الحديثة) لتوفير أقصى تغطية. عند وجودهما معاً، تكون الأولوية لـ frame-ancestors في المتصفحات التي تدعم CSP. ويضمن إرسال الرأسين حمايةً من اختطاف النقرات عبر جميع برامج المستخدم.
مخاطر iframe ذي الأصل نفسه
يمكن أن تشكل iframes ذات الأصل نفسه مخاطر أيضاً: إذ يمكن لثغرة XSS مخزّنة في صفحة مضمّنة الوصول إلى الصفحة الحاوية عبر parent.document عندما يكون الأصل نفسه. استخدم sandbox من دون allow-same-origin مع iframes ذات الأصل نفسه التي لا تحتاج إلى الوصول إلى الصفحة الحاوية، للحد من أضرار الثغرات الموجودة في المحتوى المضمّن.
اختبار حمايتك
تحقّق من الحماية من اختطاف النقرات باستخدام علامة تبويب الشبكة في المتصفح لفحص رؤوس الاستجابة بحثاً عن X-Frame-Options أو CSP frame-ancestors. تحلّل أدوات مثل securityheaders.com الرؤوس. أنشئ صفحة HTML تجريبية تحتوي على iframe يشير إلى موقعك، وتحقّق من فشل تحميله.
عمليات التضمين من جهات خارجية
عند تضمين محتوى من جهات خارجية مثل YouTube وGoogle Maps، يكون موقعك هو الموقع الذي يضمّن المحتوى — لذا تأكّد من أن الخدمة المضمّنة تسمح بالتضمين ضمن سياسة X-Frame-Options الخاصة بها. لا يمكنك تضمين موقع يمنع التضمين، وهذا مقصود لحماية مستخدمي الخدمة المضمّنة.
CSP frame-ancestors في وسوم meta
بخلاف معظم توجيهات CSP، لا يمكن ضبط frame-ancestors من خلال وسم HTTP-equiv من نوع meta، بل يجب إرساله كرأس استجابة HTTP. ويضمن ذلك عدم تمكّن المهاجمين من إزالة الحماية عبر التلاعب بـ HTML المضمّن قبل أن يقرأ المتصفح وسوم meta.
اختبار المعرفة
لماذا تُعد شيفرة كسر الإطارات باستخدام JavaScript وسيلة غير موثوقة للدفاع ضد اختطاف النقرات؟
الملخص
يضمّن اختطاف النقرات صفحات تتطلب تسجيل الدخول داخل iframes شفافة لاختطاف النقرات. وتتمثل الحماية في استخدام رؤوس X-Frame-Options: DENY أو CSP frame-ancestors: none من جهة الخادم. اضبط كليهما لتوفير الحماية عبر المتصفحات المختلفة. كسر الإطارات باستخدام JavaScript غير موثوق — استخدم دائماً رؤوس HTTP. ويوفّر frame-ancestors قائمة سماح دقيقة بالمصادر الموثوقة، وهو ما لا يستطيع X-Frame-Options توفيره.
الأسئلة الشائعة
هل درس «أمان iframe: Clickjacking وX-Frame-Options» مجاني؟
نعم — نص درس «أمان iframe: Clickjacking وX-Frame-Options» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة HTML Academy، انتقل إلى CoddyKit PRO. تتضمن دورة HTML Academy 4 دروس في المجموع.
ماذا ستتعلم في «أمان iframe: Clickjacking وX-Frame-Options»؟
منع هجمات Clickjacking باستخدام X-Frame-Options وCSP تتمرن على HTML Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ HTML Academy؟
لا تُشترط خبرة سابقة. HTML Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «أمان iframe: Clickjacking وX-Frame-Options»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس HTML Academy هذا؟
نعم. كل درس في HTML Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- عنصر iframe وsrc وsandbox
- أمان iframe: Clickjacking وX-Frame-Options
- عنصرا embed وobject
- التحميل الكسول لإطارات iframe