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;