Content Security Policy וה-CMP שלכם: איך גורמים ל-CSP ולהסכמה לעבוד יחד

שתי שכבות אבטחה שחייבות להסכים

Content Security Policy (CSP) אומרת לדפדפן מאילו מקורות עמוד רשאי לטעון סקריפטים, סגנונות, תמונות, פריימים ובקשות רשת. פלטפורמת ניהול הסכמה עושה את העבודה ההפוכה: היא מחליטה אילו מהסקריפטים האלה מותר להפעיל על סמך בחירת המשתמש. כששתיהן מוגדרות בנפרד, הן מתנגשות. ה-CMP נכשל בטעינה כי ה-CSP חוסמת אותו, או שה-CSP מרוככת כל כך כדי להכיל את ה-CMP ותגי הפרסום שהיא כבר לא מגינה על כלום.

מדריך זה מסביר אילו הנחיות CSP CMP בדרך כלל צריך, איך nonces מתקשרים עם הזרקת סקריפטים, ואיך להשיק שינויים בלי לשבור את הבאנר.

מה CMP בדרך כלל צריך מה-CSP

הדרישות המדויקות תלויות בספק, ולכן תמיד התחילו מהתיעוד של ה-CMP שלכם. באופן כללי, בדקו את ההנחיות האלה:

באתרי TCF זכרו שה-CMP יוצר גם פריים מאתר בשם __tcfapiLocator בעמוד. הפריים הזה נוצר ללא מקור מרוחק, ולכן בדרך כלל אינו זקוק לרשומת frame-src, אך כדאי לוודא זאת בבדיקות.

בעיית ה-Stub המשולב

רוב ה-CMPs מבקשים להציב סקריפט משולב קטן — ה-stub — בראש העמוד, כדי שסקריפטים אחרים יוכלו להכניס קריאות לתור לפני שה-CMP הראשי נטען. CSP מחמירה חוסמת סקריפטים משולבים אלא אם מתירים אותם במפורש. יש שלוש אפשרויות:

  1. nonce. צרו ערך אקראי לכל תגובה, הוסיפו אותו לכותרת ה-CSP בצורת 'nonce-...' ולתג <script> של ה-stub. זו האפשרות הגמישה ביותר לעמודים דינמיים.
  2. hash. הוסיפו את גיבוב SHA-256 של התוכן המדויק של ה-stub אל script-src. זה עובד היטב לאתרים סטטיים, אך כל שינוי ב-stub, אפילו רווח, שובר אותו.
  3. אירוח עצמי של ה-stub כקובץ חיצוני בדומיין שלכם, המכוסה על ידי 'self'. זה דורש זהירות כדי שהוא ייטען מוקדם מספיק.

הימנעו מ-'unsafe-inline' כקיצור דרך. הוא מתיר כל סקריפט משולב, ומסיר חלק גדול מההגנה שה-CSP מספקת.

Nonces וסקריפטים שה-CMP מזריק

CMP שחוסם סקריפטים עד להסכמה פועל לעיתים קרובות בכך שהוא מעכב אותם ומזריק אותם מאוחר יותר. תחת CSP מבוססת nonce, צריך להתיר גם את הסקריפטים המוזרקים האלה. יש שתי גישות נפוצות:

מנהלי תגים מעלים את אותה שאלה. אם אתם טוענים תגי פרסום ואנליטיקה דרך מנהל תגים, עקבו אחר התיעוד שלו בנוגע ל-nonces וודאו שה-CMP ומנהל התגים משתמשים בגישה עקבית.

תגי פרסום מקשים על CSP

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

בכל מקרה, ה-CMP צריך להיות ברשימת ההיתרים המפורשת, ולא מכוסה רק על ידי תו כללי, כדי ששינוי ב-CSP לעולם לא יכבה את הבאנר בשקט.

השקה במצב Report-Only

השתמשו קודם בכותרת Content-Security-Policy-Report-Only. הדפדפן מדווח על הפרות בלי לחסום דבר, כך שאפשר לראות מה מדיניות חדשה הייתה שוברת.

  1. פרסו את המדיניות במצב report-only עם נקודת קצה לדיווח.
  2. טענו עמודים בפרופילי דפדפן נקיים ועברו על כל תהליך ההסכמה: ביקור ראשון, אישור הכל, דחיית הכל, בחירה מותאמת, ביטול הסכמה.
  3. עברו על דוחות ההפרות ועל קונסולת הדפדפן בחיפוש אחר משאבי CMP חסומים.
  4. התאימו את המדיניות, ואז עברו לאכיפה.
  5. השאירו את הדיווח פעיל גם לאחר האכיפה כדי לתפוס נסיגות.

תסמינים של התנגשות CSP

עיקרי הדברים

← בdelays delays קרא הכל →