אינטראקציות מאובטחות של חלונות קופצים עם נכסים מוגבלים

קבלת בידוד ממקורות שונים והגנה מפני דליפות מאתרים שונים בזמן אינטראקציה עם חלונות קופצים.

Arthur Hemery
Maud Nalpas
Maud Nalpas

יש ערך חדש ב-Cross-Origin Opener Policy (COOP): restrict-properties. הוא מאפשר יתרונות אבטחה ומאפשר לאמץ בקלות בידוד בין מקורות לאתר, ובמקביל לאפשר לאתר להשתמש בחלונות קופצים של צד שלישי לצורכי תשלומים, אימות או תרחישים אחרים לדוגמה.

כדי להתחיל להתנסות ב-restrict-properties, צריך להשתתף בגרסת המקור לניסיון החל מ-Chrome 116.

למה כדאי להשתמש בrestrict-properties

ל-restrict-properties יש שני תרחישים עיקריים לדוגמה:

מניעת הדלפות בין אתרים ללא הפסקה

כברירת מחדל, כל אתר יכול לפתוח את האפליקציה בחלון קופץ ולקבל הפניה אליה.

אתר זדוני יכול לנצל לרעה את הפעולות האלה כדי לבצע מתקפות כמו דליפות בין אתרים. כדי לצמצם את הסיכון, אפשר להשתמש בכותרת Cross-Origin-Opener-Policy (COOP).

עד עכשיו, האפשרויות שלך לגבי Cross-Origin-Opener-Policy היו מוגבלות. תוכלו:

  • הגדרה של same-origin, שחוסמת את כל האינטראקציות בין מקורות עם חלונות קופצים.
  • הגדרה של same-origin-allow-popups, שחוסמת את כל האינטראקציות בין מקורות שפותחים את האתר בחלון קופץ.
  • הגדרה של unsafe-none שמאפשרת את כל האינטראקציות בין מקורות עם חלונות קופצים.

כך, אתרים שלא היו צריכים לפתוח בחלון קופץ וליצור אינטראקציה עם תוכנת הפתיחה שלהם כדי לאכוף COOP. האפשרות הזו השאירה תרחישים לדוגמה בשימוש מרכזי, כמו כניסה יחידה (SSO) ותשלומים, שלא מוגנים מפני הדלפות בין אתרים.

Cross-Origin-Opener-Policy: restrict-properties פותרת את הבעיה.

באמצעות restrict-properties, המאפיינים שיכולים לשמש לספירת פריימים ומתקפות אחרות של דליפות בין אתרים אינם זמינים, אבל מותר לבצע תקשורת בסיסית בין חלונות דרך postMessage ו-closed.

כך ניתן לשפר את אבטחת האתר תוך שמירה על תרחישים לדוגמה עיקריים. למשל:

  • אם מספקים שירות בחלון קופץ, הגדרת Cross-Origin-Opener-Policy: restrict-properties תגן על עצמך מפני מגוון של התקפות דליפות מאתרים שונים. עדיין יש לך אפשרות לפתוח את כל הדפים שיכולת לפתוח בעבר.
  • אם אתם צריכים לגשת לחלון קופץ ממקורות שונים, ההגדרה Cross-Origin-Opener-Policy: restrict-properties תגן על האתר באופן דומה מפני ספירת iframe. תוכלו לפתוח את אותה קבוצה של חלונות קופצים שאתם פותחים היום.
  • אם גם הפותח וגם נפתח הגדירו את הכותרת, והדפים הם ממקורות צולבים, ההתנהגות שלה תהיה דומה לזו של אחד מהם, שהגדיר את הכותרת. אם המקור שלהם זהה, תוענק גישה מלאה.

הפיכת האתר למבודד ממקורות שונים

למה צריך לחסום מקורות שונים

חלק מממשקי ה-API לאינטרנט מגבירים את הסיכון להתקפות ערוץ צדדי כמו Spectre. כדי למזער את הסיכון, דפדפנים מציעים סביבה מבודדת שמבוססת על הסכמה שנקראת בידוד בין מקורות. במצב בידוד בין מקורות, דף האינטרנט יכול להשתמש בתכונות שחלות עליהן הרשאות, כולל SharedArrayBuffer, performance.measureUserAgentSpecificMemory() וטיימרים ברמת דיוק גבוהה ברזולוציה גבוהה יותר, ובמקביל לבודד את המקור מגורמים אחרים אם לא אישרתם זאת.

עד עכשיו, כדי להשתמש בממשקי ה-API האלה הייתם צריכים להגדיר את Cross-Origin-Opener-Policy: same-origin. עם זאת, הדבר יקטע כל זרימה של חלון קופץ ממקורות שונים שייתכן שתזדקק להם, כמו כניסה יחידה ו-Payments.

עכשיו אפשר להשתמש ב-Cross-Origin-Opener-Policy: restrict-properties במקום ב-Cross-Origin-Opener-Policy: same-origin כדי להפעיל בידוד בין מקורות. במקום לנתק את הקשר הפתוח, הוא רק מגביל אותו לקבוצת המשנה המינימלית של התקשורת, window.postMessage() ו-window.closed.

תוכלו להפעיל בידוד בין מקורות באמצעות שתי הכותרות הבאות:

Cross-Origin-Opener-Policy: restrict-properties
Cross-Origin-Embedder-Policy: require-corp

או

Cross-Origin-Opener-Policy: restrict-properties
Cross-Origin-Embedder-Policy: credentialless

מידע נוסף על credentialless זמין במאמר טעינת משאבים ממקורות שונים ללא כותרות CORP באמצעות COEP: credentialless.

הדגמה (דמו)

בהדגמה של בידוד בין מקורות תוכלו לנסות אפשרויות שונות לכותרת.

ניסוי עם גרסת המקור לניסיון

כדי להתנסות ב-Cross-Origin-Opener-Policy: restrict-properties, מצטרפים אל גרסת המקור לניסיון.

תמיכת דפדפן

בשלב זה יש תמיכה ב-Cross-Origin-Opener-Policy: restrict-properties רק ב-Chrome. דפדפנים אחרים מעורבים באופן פעיל בדיון בנושא תקינה.

שאלות נפוצות

האתר שלי צריך לתקשר עם חלונות קופצים מאותו מקור. האם צריך להשתמש ב-COOP: restrict-properties כדי לאפשר בידוד בין מקורות?

הגדרה של COOP: restrict-properties גם בחלון הקופץ וגם בדף הראשי לא תגרום להגבלות. הגדרה של המדיניות רק בחלון הקופץ או רק בדף הראשי תמנע גישה למאפיינים מלבד postMessage ו-closed בקובץ הפותח, גם אם הם מאותו מקור.

האם קבוצת המאפיינים המותרים קבועה?

על סמך המשוב עד עכשיו, נראה שהקישורים window.postMessage ו-window.closed יספיקו לרוב תהליכי העבודה, אבל אנחנו עדיין שוקלים לפתוח אותם לנכסים אחרים. אם יש לכם תרחיש לדוגמה שלא ניתן לפתור אותו באמצעות postMessage ו-closed בלבד, השאירו את המשוב שלכם בשרשור Intent to experiment.

משאבים