מי עוד קורא? סקריפטים של צדדים שלישיים בדפי טפסים
דף של טופס יצירת קשר טוען לעיתים קוד מחצי תריסר חברות אחרות. חלקו יכול לראות מה מבקרים מקלידים — ואת רובו איש בצוות מעולם לא בדק.
כשמישהו ממלא טופס יצירת קשר, הוא מניח שההודעה מגיעה למפעילי האתר. עם זאת, באתרים רבים דף הטופס מפעיל גם סקריפטים של ספקי ניתוח נתונים, רשתות פרסום, ספקי צ׳אט וכל מה שמנהל תגיות אסף במשך השנים. כל אחד מהסקריפטים האלה רץ עם אותן הרשאות כמו הקוד של האתר: הוא יכול לקרוא את הדף, לצפות בשדות הקלט ולשלוח מידע לשרתים שלו. זה לא אומר שכולם עושים זאת. אבל בדף שבו מבקרים מקלידים את שמם, כתובת הדוא״ל שלהם ולעיתים פרטים על בריאות, כסף או בעיות משפטיות, צריך לדעת מי עוד קורא.
החשודים הרגילים
- כלים לשחזור פעילות בגלישה מקליטים לחיצות, גלילה ולעיתים קרובות הקשות, כדי שניתן יהיה להפעיל שוב את הביקור מאוחר יותר. אלא אם השדות מוסתרים, זה יכול לכלול את מה שאנשים מקלידים בטופס.
- פיקסלים של פרסום וניתוח נתונים מדווחים לצדדים שלישיים על צפיות בדפים והמרות — בדף הטופס עצמו, ולעיתים קרובות מאוד גם בדף התודה.
- רכיבי צ׳אט טוענים יישום שלם מדומיין אחר, בדרך כלל בכל דף, כולל הדף עם הטופס.
- מנהלי תגיות מאפשרים לאנשי שיווק להוסיף סקריפטים בלי לפרוס גרסה חדשה. זה נוח, אבל המשמעות היא גם שקוד יכול להגיע לדף הטופס בלי שאיש בדק אותו.
- כלי עזר קטנים יותר — בדיקות A/B, מפות חום, הטמעות מרשתות חברתיות, גופנים ומפות — מוסיפים כל אחד שרת שמקבל לפחות את כתובת ה-IP של המבקר ובדרך כלל גם את כתובת האתר; הסקריפטים מביניהם יכולים לקרוא גם את כתובת ה-URL המלאה של הדף.
שחזור פעילות בגלישה: מכשיר הקלטה ליד שדה הקלט
רוב כלי השחזור מציעים הגדרות להסתרת שדות קלט או להחרגת אזורים שלמים, וחלקם מסתירים שדות מסוימים כברירת מחדל. נקודות התורפה הן החריגים: שדה הודעה בטקסט חופשי שהגדרת ברירת המחדל אינה מכסה, טופס שנבנה מרכיבים שכללי ההסתרה אינם מזהים, או הגדרה שמישהו כיבה בזמן איתור תקלות ומעולם לא הפעיל מחדש. הקלטה שמאוחסנת אצל צד שלישי עלולה אז להכיל בדיוק את מה שהמבקר כתב לאתר — דבר שהוא לא ציפה לו ושמדיניות הפרטיות אולי אינה מזכירה כלל, אף שלפי סעיף 13 של GDPR היא חייבת לציין את הנמענים או את קטגוריות הנמענים של מידע אישי.
פיקסלים ודף התודה
מעקב המרות צריך אות לכך שטופס נשלח, ודף התודה הוא המקום המתבקש להפעלתו. רוב הפיקסלים שולחים את כתובת הדף המלאה עם כל אירוע. אם הטופס נשלח באמצעות GET, או שההפניה אחרי השליחה מוסיפה ל-URL ערכים כגון ?name=…&email=…, הערכים האלה מגיעים ישירות לספק הפרסום או ניתוח הנתונים. חלק מהפיקסלים מציעים גם תכונות שאוספות אוטומטית כתובות דוא״ל או מספרי טלפון מטפסים כדי לשפר התאמה. ואם הפיקסל פועל לפני שהמבקר השיב לבאנר העוגיות — או אחרי שסירב — הבעיה כבר אינה רק טכנית.
מנהלי תגיות, הסכמה ושרשרת האספקה
מנהלי תגיות הם לעיתים המקום שבו מאבדים את התמונה הכוללת. תג קמפיין לתערוכה מלפני שנתיים, ניסיון של כלי למפות חום, פיקסל לרשת שאיש כבר אינו משתמש בה — כל אלה עשויים עדיין להיטען בכל דף, כולל בטופס. טריגרים מוגדרים לעיתים קרובות ל״כל הדפים״, וכללי הסכמה מוגדרים תג אחר תג, כך שתג אחד עם תנאי חסר מספיק לטעינת סקריפט לפני שהמבקר הסכים.
ואז יש שרשרת האספקה. בהטמעת סקריפט משרת אחר, נותנים אמון במי ששולט באותו שרת היום ובעתיד. ספק יכול לשנות את פעולת הסקריפט, להימכר או לסבול מפגיעה בתשתית ההפצה שלו. הדפדפן אינו יכול להבחין בין סקריפט לגיטימי לסקריפט ששונה בזדון, ולכן קוד שהוזרק לדף טופס יכול לקרוא כל שדה ולשלוח אותו לכל מקום — אותו דפוס המשמש לגניבת מידע בדפי תשלום.
מה אפשר לעשות
- 1יש לערוך מלאי. לפתוח כל דף טופס ואת דף התודה שלו עם כלי הפיתוח של הדפדפן, לבדוק בלשונית הרשת ולרשום כל שרת חיצוני. יש לעשות זאת פעם ללא הסכמה ופעם אחרי אישור הבאנר.
- 2יש להסיר מה שאיש אינו צריך. תגיות ללא אחראי ומטרה ברורים הן מועמדות למחיקה. יש להגביל את הטריגרים במנהל התגיות כך שבדפי טפסים ירוצו רק התגיות שחייבות לרוץ בהם.
- 3יש להסתיר קלט בכלי שחזור. להסתיר את כל שדות הקלט, לא רק סיסמאות, ולהחריג את כל אזור הטופס אם אפשר. לאחר מכן יש לצפות בהקלטה כדי לראות מה נשמר בפועל.
- 4יש לשלוח המרות ללא מידע אישי. לשלוח באמצעות POST, להשאיר את ערכי הטופס מחוץ לכתובות ההפניה ולהפעיל אירוע ניטרלי כגון ״contact_form_sent״. יש לכבות איסוף אוטומטי של שדות טופס בפיקסלים.
- 5יש לטעון רק אחרי הסכמה. סקריפטים שדורשים הסכמה אינם רשאים להיטען לפני שהמבקר מסכים — וחייבים להישאר כבויים אם הוא מסרב. יש לבדוק את שני המסלולים.
- 6יש לקבע גרסאות ולהגביל היכן שאפשר. Subresource Integrity (ערך גיבוב בתג הסקריפט) גורם לדפדפן לדחות קובץ סטטי שהשתנה; הוא אינו מתאים לסקריפטים שמשתנים מטבעם, כגון מנהלי תגיות. Content Security Policy מגבילה אילו שרתים רשאים להריץ סקריפטים — כדאי להתחיל במצב דיווח בלבד כדי לראות מה יפסיק לעבוד.
- 7יש לעקוב אחרי שינויים. שרת סקריפטים חדש בדף טופס צריך להיות החלטה מודעת, לא הפתעה. יש לוודא שמתקבלת הודעה כשהוא מופיע.
formexposed בודק אילו פיקסלי מעקב פועלים בדפי הטפסים, אם כלי לשחזור פעילות בגלישה עשוי להקליט קלט טופס ואם דחיית באנר העוגיות באמת מפסיקה מעקב — באופן פסיבי, בלי לשלוח דבר. בדיקה חינמית מציגה את הרמה הכוללת; הממצאים האלה נמצאים בדוח המלא. עם ניטור של דומיין מאומת, formexposed גם מתריע כששרת סקריפטים חדש מופיע בדף טופס.