Clickjacking היא התקפה זדונית שבה משתמשים נופלים קורבן לתרמיות שמעודדות אותם ללחוץ על קישורים או על רכיבי ממשק משתמש באתר שנראה כמו אתר מהימן ומוכּר. בדרך כלל, הדבר נעשה על ידי הטמעה של חלק מהאתר המהימן או את כולו באתר הזדוני באמצעות <iframe>.
הכותרת X-Frame-Options (XFO) וההנחיה frame-ancestors בכותרת Content-Security-Policy (CSP) יכולות לצמצם את התקפות ה-clickjacking על ידי שליטה באופן שבו אפשר להטמיע אתר בתוך <iframe>.
מה גורם לבדיקה של Lighthouse להיכשל
הביקורת תעבור אם כותרת ה-XFO מוגדרת עם SAMEORIGIN או DENY, או שההוראה frame-ancestors מוגדרת בכותרת ה-CSP. הביקורת תיכשל אם אף אחת משתי כללי המדיניות האלה לא מוגדרת.
איך מגדירים מדיניות בקרת מסגרות כדי לצמצם את הסיכון להתקפת clickjacking
צריך להגדיר מדיניות בקרה על מסגרות בכותרות ה-HTTP של בקשת המסמך הראשונית. הכותרת X-Frame-Options וההוראה frame-ancestors ב-Content-Security-Policy לא יפעלו אם מגדירים אותן ברכיב <meta>.
כותרת XFO
הגדרת DENY או SAMEORIGIN לכותרת XFO תפחית את היקף ההתקפות מסוג clickjacking:
X-Frame-Options: SAMEORIGIN
X-Frame-Options: DENY
ההנחיה SAMEORIGIN מאפשרת להציג את הדף רק אם לכל המסגרות של האב יש את אותו מקור כמו הדף עצמו. לעומת זאת, ההנחיה DENY מונעת את הצגת הדף בפריים, ללא קשר למקור של פריים ההורה.
כותרת CSP
ההוראה frame-ancestors בכותרת ה-CSP מגדירה אילו אתרים יכולים להטמיע את הדף הנתון ב-<frame>, ב-<iframe>, ב-<object> או ב-<embed>. בדומה ל-XFO, אפשר להשתמש בהוראה frame-ancestors של CSP כדי לצמצם את היקף ההתקפות מסוג clickjacking על ידי הגדרתה ל-self או ל-none:
Content-Security-Policy: frame-ancestors 'self';
Content-Security-Policy: frame-ancestors 'none';
עם זאת, ההנחיה frame-ancestors גמישה יותר מ-XFO כי אפשר להגדיר בה מקורות ספציפיים של הורה שיכולים להטמיע את הדף:
Content-Security-Policy: frame-ancestors 'self' https://example.com;