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

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

הפעלת תג הקונטיינר לשימוש ב-CSP

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

Content-Security-Policy:
script-src 'nonce-{SERVER-GENERATED-NONCE}';
img-src www.googletagmanager.com;
connect-src www.googletagmanager.com

לאחר מכן, משתמשים בגרסה עם תמיכה ב-nonce של קוד מאגר התגים של Tag Manager בקוד. מגדירים את מאפיין ה-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 יפיץ את המזהה החד-פעמי לכל הסקריפטים שהוא מוסיף לדף.

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

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

כדי להשתמש בגישה הזו, צריך להוסיף את ההנחיות הבאות ל-CSP:

דירקטיבה תוכן
script-src 'unsafe-inline' https://www.googletagmanager.com
img-src www.googletagmanager.com
connect-src www.googletagmanager.com

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

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

דירקטיבה תוכן
script-src 'unsafe-eval'

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

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

דירקטיבה תוכן
script-src https://googletagmanager.com https://tagmanager.google.com
style-src https://googletagmanager.com https://tagmanager.google.com https://fonts.googleapis.com
img-src https://googletagmanager.com https://ssl.gstatic.com https://www.gstatic.com
font-src נתונים מ-https://fonts.gstatic.com:

Google Analytics 4 (Google Analytics)

כדי להשתמש בתג Google Analytics 4‏ (Google Analytics), ה-CSP צריך לכלול את ההוראות הבאות:

דירקטיבה תוכן
script-src https://*.googletagmanager.com
img-src https://*.google-analytics.com https://*.googletagmanager.com
connect-src https://*.google-analytics.com‏ https://*.analytics.google.com‏ https://*.googletagmanager.com

בפריסות של Google Analytics 4‏ (Google Analytics) באמצעות Google Signals, ה-CSP חייב לכלול את ההוראות הבאות:

דירקטיבה תוכן
script-src https://*.googletagmanager.com
img-src https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com
https://*.g.doubleclick.net https://*.google.com https://*.google.<TLD>
connect-src https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com
https://*.g.doubleclick.net https://*.google.com https://*.google.<TLD>
frame-src https://td.doubleclick.net

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

דירקטיבה תוכן
script-src https://www.googleadservices.com https://www.google.com https://www.googletagmanager.com
https://pagead2.googlesyndication.com https://googleads.g.doubleclick.net
img-src https://www.googletagmanager.com https://googleads.g.doubleclick.net https://www.google.com
https://google.com https://www.google.com.<TLD> https://pagead2.googlesyndication.com
frame-src https://www.googletagmanager.com https://td.doubleclick.net
connect-src https://pagead2.googlesyndication.com https://www.googleadservices.com
https://www.google.com https://google.com

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

דירקטיבה תוכן
script-src https://www.googletagmanager.com
frame-src https://www.googletagmanager.com
connect-src https://google.com https://www.google.com

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

Floodlight

משתמשי Floodlight יכולים להפעיל ספקי CSP באמצעות ההגדרות הבאות. מחליפים את הערכים של <FLOODLIGHT-CONFIG-ID> במזהה מפרסם ספציפי ב-Floodlight, או ב-* כדי לאפשר כל מזהה מפרסם:

לכל המשתמשים:

דירקטיבה תוכן
img-src https://ad.doubleclick.net https://ade.googlesyndication.com https://adservice.google.com
https://www.googletagmanager.com
frame-src https://td.doubleclick.net
connect-src https://pagead2.googlesyndication.com https://www.google.com https://www.googleadservices.com

בסמנים מסוג 'סקריפטים מותאמים אישית':

דירקטיבה תוכן
frame-src https://<FLOODLIGHT-CONFIG-ID>.fls.doubleclick.net

בתגי תמונה:

דירקטיבה תוכן
img-src https://ad.doubleclick.net https://ade.googlesyndication.com