דלג לתוכן הראשי
חזרה לבלוג

צ׳אטבוטים לאתרים

הצ׳אטבוט באתר לא נטען? בדקו CSP והסכמה בלי לפגוע באבטחה

אבחינו בין תקלות CSP, הסכמה, סקריפט, תצורה ותשובות בצ׳אטבוט שאינו נטען. השתמשו בטבלת משאבים ומצבים בלי להחליש את הגנות האתר.

מאמרים מעשייםAchla AI
פורסם
עודכן

7 דקות קריאה

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

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

המדריך מציע רשימת בדיקה מקורית של משאבים ומצבים לצורך הערכת וידג׳ט צ׳אט באתר. הוא אינו ממליץ להשבית Content Security Policy, להעתיק רשימת אישורים של ספק אחר או להכריז שתצורת הסכמה עומדת בדרישות. אבחון מועיל עשוי להסתיים בהשהיה עקב אי־תאימות, ולא בהוראה להחליש את מדיניות האתר.

מחבר: Achla AI, ארגון. נבדק ב־14 באוקטובר 2026. המסגרת משלבת תיעוד עדכני של דפדפנים וספקים עם הוראות התקנה של Achla שנבדקו, והוכנה בסיוע בינה מלאכותית. הדוגמאות היפותטיות; לא נמדדו תקריות לקוח או תוצאות בדיקות בדפדפן. המטרה היא להפוך בעיית טעינה לניתנת לבדיקה לפני שבעל האתר מעריך או משנה וידג׳ט.

מה חסר: ממשק, בקשה או מקור תשובה?

תארו מה המבקר רואה בפועל. ״הצ׳אטבוט מקולקל״ מחבר כמה תצפיות שדורשות אחראים ותיקונים שונים.

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

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

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

פעלו לפי טבלת המשאבים והמצבים

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

שלבראיות לרישוםשאלה לאחראי
סימון הדףההטמעה הצפויה קיימת או חסרה בדף שפורסםהאם התבנית או המחבר אחראים להיקף הדפים המיועד?
טועןכתובת הסקריפט, מצב הבקשה והודעת מסוף רלוונטיתהאם הטוען התבקש, נחסם או לא הצליח להיטען?
תצורהבקשת התצורה והתגובה שניתן לראותהאם הבקשה הגיעה לשירות הצפוי והאם המצב המתועד מוכן?
בקשת תשובהמה קורה אחרי שליחת שאלת בדיקה ציבוריתהאם הבקשה נחסמת, נדחית או מחזירה תגובה שימושית?
ממשק שנטעןפקדים גלויים וכל רכיב מוסתר או מוזזהאם הווידג׳ט נטען אך אינו מופיע במקום הצפוי?
רצף הסכמהתצפיות בביקור חדש, בסירוב, באישור ובביקור חוזרהאם עיכוב הטעינה מכוון והאם הרצף המאושר עובד?

השאירו שדה לא ידוע כלא ידוע. ״לא נצפתה בקשה״ ו״הבקשה נדחתה״ הם רישומים שונים. שמרו הודעת מסוף מסוימת או תוצאת בקשה אם הן זמינות, במקום לתרגם כל כישלון ל־CORS.

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

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

זהו גם את מנגנון ההטמעה. מחבר WordPress ומודול Drupal של Achla משתמשים בטוען משלהם, ולא בתג /w.js שהודבק ישירות. הוראות ההתקנה העדכניות מתארות את ההבדל. היעדר התג המסוים הזה לבדו אינו מוכיח שהמחבר נכשל.

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

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

Content Security Policy היא מדיניות משאבים בדפדפן. מדריך CSP של MDN מסביר כיצד היא מגבילה את התוכן שדף יכול לטעון או להריץ. וידג׳ט עשוי להיות תלוי ביותר מהסקריפט הראשוני שלו, ולכן אחרי טוען שהצליח עדיין עשויה להיחסם בקשת תצורה או טעינת עיצוב.

התיעוד של script-src עוסק במקורות סקריפטים ובהרצה. התיעוד של connect-src עוסק בחיבורים שנעשים באמצעות ממשקים כמו fetch. לעיצוב ולמסגרות יש שיקולי מדיניות משלהם. התאימו את ההודעה האמיתית של הדפדפן למשאב ולהנחיה המצוינים בה.

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

דף פתרון שגיאות CSP של Intercom מתאר את המשאבים ואת אבחון המדיניות עבור Intercom. ההנחיות של tawk.to לתמונות חסרות בווידג׳ט מתארות את תסמיני המשאבים שלה. הדפים ממחישים מדוע לממשק שמוצג חלקית עשויה להיות בעיית משאב מסוים; הם אינם מתכוני תצורה עבור Achla.

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

התייחסו להסכמה כרצף של מצבים

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

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

השתמשו ברישום נפרד לכל מצב מתוכנן:

מצב המבקרמה לצפותמה אין להניח ברישום
מבקר חדשהאם הטוען מתבקש לפני בחירהשכל צ׳אטבוט חייב להיטען מיד
סירובהאם נשמרת התנהגות הסירוב המאושרתשהיעדר וידג׳ט הוא אוטומטית פגם
אישורהאם רצף הטעינה הצפוי מתחיל ומסתייםשסקריפט מוצלח אחד מוכיח את תקינות האינטראקציה כולה
ביקור חוזרהאם הבחירות השמורות יוצרות את ההתנהגות הרצויהשהמפגש של העורך מייצג כל מבקר

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

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

מה אם מדיניות עיצוב מחמירה והווידג׳ט אינם מתאימים?

לפעמים המסקנה הנכונה היא שדרישותיו המתועדות של הווידג׳ט אינן מתאימות למדיניות האתר.

מדריך ההתקנה העדכני של Achla אומר שהווידג׳ט מזריק את גיליון העיצוב שלו כאלמנט style, ומונה הרשאה לעיצוב מוטבע בין דרישות CSP. זוהי עובדת תאימות שיש לבחון עם אחראי האבטחה, ולא המלצה לאשר חריג גורף של unsafe-inline. התיעוד שנבדק אינו מוכיח קיום API של Achla לשילוב nonce או hash.

ספק אחר עשוי לתעד מנגנון אחר. יומן שינויי CSP של SiteSpeakAI מתאר תמיכה ב־nonce בווידג׳ט שלה. ההצהרה אינה מוכיחה תמיכה מקבילה ב־Achla ואינה מצדיקה העתקת המאפיין לסקריפט אחר.

אם האתר דורש מדיניות nonce או hash מחמירה, השהו את ההטמעה עד לאימות התנהגות תואמת. בקשו מהספק ראיות עדכניות, או בחנו חלופה שדרישותיה המתועדות מתאימות למדיניות. שתפו את האחראי למדיניות; כפתור שנראה עובד אינו קבלה של שינוי בגבול האבטחה.

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

הכינו חבילת אבחון שהוסרו ממנה פרטים פרטיים

העברה מועילה מאפשרת למתחזק האתר, לאחראי ההסכמה או לספק לשחזר את הבעיה בלי לקבל מידע פרטי.

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

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

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

בדקו שוב את אותו מצב לאחר תיקון מאושר אחד

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

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

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

העריכו את דרישות Achla העדכניות לפני החיבור

השתמשו בטבלה שהושלמה כרשימת תאימות: האם ההתקנה המתועדת של הווידג׳ט, המדיניות ודרישות התוכן הציבורי מתאימות לאתר המסוים הזה? למסלולים ייעודיים ל־CMS בדקו את מחבר WordPress הקיים או את מודול Drupal. מסלול סקריפט כללי תלוי ביכולת האמיתית של האתר לכלול ולאפשר אותו; הוא אינו מוכיח הטמעה ייעודית ל־CMS אחר.

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