שימוש ב-Tag Manager עם Content Security Policy

Content Security Policy‏ (CSP) הוא תקן אבטחה נפוץ באינטרנט שנועד למנוע סוגים מסוימים של מתקפות הזרקה, בכך שהוא מאפשר למפתחים לשלוט במשאבים שהאפליקציות שלהם טוענות. במדריך הזה מוסבר איך לפרוס את Google Tag Manager באתרים שמשתמשים ב-CSP.

הפעלת תג מאגר התגים לשימוש ב-CSP

כדי להשתמש ב-Google Tag Manager בדף עם CSP, ה-CSP חייב לאפשר את הפעלת קוד מאגר התגים של Tag Manager. הקוד הזה בנוי כקוד JavaScript מוטבע שמזריק את הסקריפט gtm.js. יש כמה דרכים לעשות את זה, כמו שימוש ב-nonce או ב-hash. השיטה המומלצת היא להשתמש ב-nonce, שהוא ערך אקראי שלא ניתן לנחש, שהשרת יוצר בנפרד לכל תגובה. מזינים את ערך ה-nonce בהוראה Content-Security-Policy script-src-elem בתור nonce-{SERVER-GENERATED-NONCE}, ומשתמשים בגרסה של קוד מאגר התגים המוטמע ב-Tag Manager שמזהה ערכי nonce. מגדירים את המאפיין nonce ברכיב הסקריפט המוטבע לאותו ערך:

<!-- Google Tag Manager -->
<script nonce='{SERVER-GENERATED-NONCE}'>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;var n=d.querySelector('[nonce]');
n&&j.setAttribute('nonce',n.nonce||n.getAttribute('nonce'));f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXXXX');</script>
<!-- End Google Tag Manager -->

לאחר מכן, Tag Manager יפיץ את ה-nonce לכל הסקריפטים שהוא מוסיף לדף.

יש גישות אחרות להפעלת סקריפט מוטבע, כמו הוספת הגיבוב (hash) של הסקריפט המוטבע ב-CSP.

אם אי אפשר להשתמש בשיטות המומלצות של nonce או hash, אפשר להפעיל את הסקריפט המוטבע של Tag Manager על ידי הוספת ההוראה 'unsafe-inline' לקטע script-src-elem של ה-CSP.

כדי להשתמש בגישה הזו, צריך לאפשר את הדברים הבאים ב-CSP:

הוראה תוכן
script-src-elem https://www.googletagmanager.com 'unsafe-inline'
img-src https://www.googletagmanager.com
connect-src https://www.googletagmanager.com https://www.google.com

משתני JavaScript בהתאמה אישית

בגלל האופן שבו משתני JavaScript בהתאמה אישית מוטמעים, הם יקבלו את הערך undefined אם יש CSP, אלא אם ההוראה 'unsafe-eval' ניתנת בקטע script-src של ה-CSP.

הוראה תוכן
script-src 'unsafe-eval'

מצב התצוגה המקדימה

כדי להשתמש במצב תצוגה מקדימה של Google Tag Manager, ה-CSP צריך לאפשר את הפעולות הבאות:

הוראה תוכן
script-src-elem https://www.googletagmanager.com https://tagmanager.google.com
style-src https://www.googletagmanager.com https://tagmanager.google.com https://fonts.googleapis.com
img-src https://www.googletagmanager.com https://ssl.gstatic.com https://www.gstatic.com
font-src https://fonts.gstatic.com data:

Google Analytics

כדי להשתמש ב-Google Analytics, ה-CSP צריך לאפשר את הדברים הבאים:

הוראה תוכן
script-src-elem https://www.googletagmanager.com
img-src https://www.googletagmanager.com https://*.google-analytics.com https://*.google.com https://*.google.<TLD> https://*.g.doubleclick.net
connect-src https://www.googletagmanager.com https://*.google-analytics.com https://*.google.com https://*.google.<TLD> https://*.g.doubleclick.net https://pagead2.googlesyndication.com
frame-src https://www.googletagmanager.com

כדי להשתמש ב-Google Analytics בלי תכונות של Google Ads, ה-CSP צריך לאפשר את הדברים הבאים:

הוראה תוכן
script-src-elem https://www.googletagmanager.com
img-src https://www.googletagmanager.com https://*.google-analytics.com
connect-src https://www.googletagmanager.com https://*.google-analytics.com https://*.google.com

כדי להשתמש בתג המרה, בתג רימרקטינג או בתג Conversion Linker של Google Ads, מדיניות ה-CSP צריכה לאפשר את הדברים הבאים:

הוראה תוכן
script-src-elem https://www.googletagmanager.com https://www.googleadservices.com https://www.google.com
img-src https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://pagead2.googlesyndication.com https://www.google.com https://www.google.<TLD>
connect-src https://www.googletagmanager.com https://www.googleadservices.com https://googleads.g.doubleclick.net https://pagead2.googlesyndication.com https://www.google.com https://www.google.<TLD> https://ad.doubleclick.net
frame-src https://www.googletagmanager.com

כדי להשתמש במשואות של נתוני משתמשים ב-Google Ads בהקשרים מאובטחים, ה-CSP צריך לאפשר את הדברים הבאים:

הוראה תוכן
script-src-elem https://www.googletagmanager.com
connect-src https://www.google.com
frame-src https://www.googletagmanager.com

המשואה של נתוני המשתמשים ב-Google Ads לא פועלת בהקשרים לא מאובטחים, ולכן הגדרת ה-CSP במקרים האלה לא רלוונטית.

Floodlight

כדי להשתמש ב-Floodlight, ה-CSP צריך לאפשר את הדברים הבאים:

הוראה תוכן
img-src https://www.googletagmanager.com https://ad.doubleclick.net https://ade.googlesyndication.com https://adservice.google.com
connect-src https://pagead2.googlesyndication.com https://www.google.com https://www.googleadservices.com https://ad.doubleclick.net
frame-src https://www.googletagmanager.com

כדי להשתמש בסקריפטים בהתאמה אישית של Floodlight, ה-CSP צריך לאפשר גם את הדברים הבאים (בנוסף לאלה שצוינו למעלה):

הוראה תוכן
frame-src https://*.fls.doubleclick.net

Merchant Center

כדי להשתמש ב-Merchant Center, מדיניות ה-CSP צריכה לאפשר את הדברים הבאים:

הוראה תוכן
script-src-elem https://www.googletagmanager.com
img-src https://*.merchant-center-analytics.goog
connect-src https://*.merchant-center-analytics.goog

שער Google Tag למפרסמים

כשמשתמשים בשער Google Tag למפרסמים, Google Tag נטען מנתיב מדידה באתר שלכם ושולח אליו נתונים (לדוגמה, https://www.example.com/metrics). חלק מהתגים עדיין שולחים בקשות לדומיינים של Google, לכן חשוב להשאיר את ההוראות שרשומות לכל מוצר, וגם לאפשר את הדברים הבאים:

הוראה תוכן מטרה
script-src-elem 'self' טעינת Google Tag מנתיב המדידה
img-src 'self' בקשות למדידה
connect-src 'self' בקשות למדידה
worker-src 'self' קובץ שירות (service worker)

חשוב לוודא שרשת ה-CDN או שרת האינטרנט לא מוסיפים את הכותרת Content-Security-Policy של האתר לתגובות מנתיב המדידה. אחרת, הדפדפן עלול לחסום את ה-service worker.

תיוג בצד השרת

כש-Google Tag שולח נתונים למאגר תגים בצד השרת, מדיניות ה-CSP צריכה לאפשר גם את שרת התיוג. ההנחיות האלה לא מחליפות את ההנחיות שמופיעות לכל מוצר, כמו https://www.googletagmanager.com. מה שצריך להוסיף תלוי במקום שבו מתארח שרת התיוג:

הוראה הגדרה באותו מקור הגדרת תת-דומיין מטרה
img-src 'self' https://TAGGING_SERVER_DOMAIN בקשות למדידה
connect-src 'self' https://TAGGING_SERVER_DOMAIN בקשות למדידה
frame-src 'self' https://TAGGING_SERVER_DOMAIN קובץ שירות (service worker)
worker-src 'self' אין צורך קובץ שירות (service worker)
script-src-elem 'self' https://TAGGING_SERVER_DOMAIN רק אם טוענים את Google Tag משרת התיוג

בהגדרה של מקור זהה, שרת התיוג מופעל מנתיב באתר (לדוגמה, https://www.example.com/metrics). בהגדרה של תת-דומיין, מחליפים את TAGGING_SERVER_DOMAIN בדומיין של שרת התיוג (לדוגמה, sgtm.example.com).

בהגדרה של אותו מקור, חשוב לוודא שה-CDN או שרת האינטרנט לא מוסיפים את הכותרת Content-Security-Policy של האתר לתגובות מנתיב התיוג. אחרת, הדפדפן עלול לחסום את ה-service worker.

קובץ שירות (service worker)

‫Google Tag משתמש בקובץ שירות (service worker) רק כשמשתמשים בשער Google Tag למפרסמים או בתיוג בצד השרת. כדי לראות את ההוראות שנדרשות לכל הגדרה, עיינו במאמרים שער Google Tag למפרסמים ותיוג בצד השרת. אם משתמשים בשניהם, ה-CSP צריך לאפשר את שניהם.

איך פותרים בעיות בעזרת Tag Assistant

כדי לפתור בעיות שקשורות ל-Content Security Policy ‏(CSP), אפשר להשתמש ב-Tag Assistant. ‫Tag Assistant יציג את רשימת המשאבים שנחסמו על ידי ה-Content Security Policy.

  1. פותחים את Tag Assistant ומזינים את כתובת האתר. האתר ייפתח בכרטיסייה חדשה.

  2. אם המדיניות Content Security Policy בדף חוסמת משאב, בעיית CSP מוצגת בקטע Page issues (בעיות בדף) ב-Tag Assistant.

    צילום מסך של Tag Assistant שבו מוצגת בעיה ב-CSP

  3. לוחצים על הצגת הבעיה לצד הבעיה שקשורה ל-CSP כדי לראות את רשימת כל המשאבים החסומים בדף. צילום מסך של Tag Assistant שבו מוצג הסליידר של בעיית ה-CSP

  4. מוסיפים את כל המשאבים החסומים ל-Content Security Policy.