ה-CAPTCHA קיים — אבל אינו מגן על דבר
רכיב גלוי של reCAPTCHA, hCaptcha או Turnstile אומר מעט מאוד על השאלה אם הטופס מוגן. אלה הגדרות שגויות נפוצות ואופן בדיקת הטפסים בתוך דקות.
בעלי אתרים רבים מוסיפים CAPTCHA לטופס יצירת הקשר, רואים את התג הקטן או את תיבת הסימון ומניחים שבעיית הספאם נפתרה. ואז הזבל ממשיך להגיע. לעיתים קרובות ה-CAPTCHA עצמו תקין — הוא פשוט אינו מחובר לשום דבר שיכול לעצור בוט. המאמר הזה עובר על הדרכים הנפוצות שבהן reCAPTCHA, hCaptcha ו-Cloudflare Turnstile הופכים לקישוט, ועל אופן בדיקת הטפסים.
איפה ההגנה מתרחשת בפועל
שלושת השירותים פועלים לפי אותו עיקרון. סקריפט בדפדפן מבצע את הבדיקות שלו ומוסר לטופס אסימון — מחרוזת קצרה שאומרת ״המבקר הזה עבר״. האסימון מגיע עם שליחת הטופס לשרת. רק שם מתקבלת ההחלטה האמיתית: השרת שולח לספק את האסימון יחד עם מפתח סודי ומקבל תשובה — הצלחה או כישלון, וב-reCAPTCHA v3 גם ציון. אם חוליה כלשהי בשרשרת חסרה, הרכיב עדיין נראה רגיל לגמרי, אבל בוט ששולח ישירות למנגנון הטיפול בטופס עובר ישר.
מפתח הבדיקה שמאפשר הכול
Google, hCaptcha ו-Cloudflare מפרסמים מפתחות בדיקה מיוחדים כדי שמפתחים יוכלו להריץ בדיקות אוטומטיות בלי לפתור חידות. עם מפתח הבדיקה הסודי המתאים, האימות תמיד מצליח — זו כל מטרתם. הם מיועדים לסביבות מקומיות ולסביבות קדם-ייצור, אך נשארים לעיתים קרובות גם במעבר לייצור: מפתח מדביק אותם במהלך הבנייה, האתר עולה לאוויר ואיש אינו מחליף אותם. reCAPTCHA לפחות מציג ברכיב הודעה שהוא מיועד לבדיקות בלבד, אבל בהגדרה בלתי נראית כמעט איש אינו מסתכל. אם גם מפתח האתר לבדיקה וגם המפתח הסודי לבדיקה פעילים בייצור, כל שליחה עוברת, בין שהיא מגיעה מאדם ובין שמבוט; אם רק מפתח האתר הוא מפתח בדיקה, האימות דווקא נכשל והודעות אמיתיות עלולות להידחות.
אסימון שאיש אינו בודק
המקרה הקלאסי השני הוא שרת שלעולם אינו פונה לספק. הרכיב פועל, אסימון נוצר ונשלח, ואז מנגנון הטיפול בטופס פשוט מתעלם ממנו. מקורות נפוצים הם טפסים שנכתבו ידנית, קטעי קוד מועתקים שמכסים רק את צד הדפדפן והגדרות תוסף שלא הושלמו. מקרה דומה: השרת אמנם פונה לשירות האימות, אך בודק רק שהבקשה עברה, לא מה כתוב בתשובה. אפשרות אחרת היא שסף הציון של reCAPTCHA v3 מוגדר ל-0, כך שמתקבל כל ציון שהשירות יכול להחזיר. חלק ממנגנוני הטיפול גם ״מאפשרים במקרה של כשל״: אם האסימון חסר או האימות נכשל, הם מקבלים את ההודעה בכל זאת — והבוט פשוט משמיט את האסימון.
כשהרכיב לא באמת נטען
הגדרות שגויות אחרות פוגעות דווקא בצד הדפדפן. אם מפתח האתר אינו רשום עבור הדומיין — מצב נפוץ אחרי מעבר מקדם-ייצור לייצור, שינוי דומיין או הוספת תת-דומיין — הספק מסרב להנפיק אסימונים ומציג שגיאה ברכיב או במסוף הדפדפן. אחרי החלפת ערכת עיצוב או עדכון תוסף, תגיות הרכיב עשויות להישאר בדף בעוד הסקריפט שמפעיל אותו נעלם. לכלי הסכמה לעוגיות יכולה להיות אותה השפעה אם הוא חוסם את סקריפט ה-CAPTCHA עד שהמבקר מסכים. מה שקורה אחר כך תלוי בשרת: אם הוא מתעקש על אסימון תקף, מבקרים אמיתיים כבר אינם יכולים לשלוח הודעות ואיש אינו מבחין בפניות האבודות; אם אינו מתעקש, בוטים עוברים בחופשיות.
קל להחמיץ שני מקרים נוספים. ב-reCAPTCHA v3, התג שבפינה מראה רק שהסקריפט נטען במקום כלשהו בדף — אולי באמצעות ערכת העיצוב או תוסף אחר — בעוד שהאינטגרציה בתוסף הטופס עצמו כבויה. גם תוספי מטמון יכולים לשמור דף יחד עם אסימון שמוטמע ב-HTML. אסימוני CAPTCHA תקפים לכמה דקות בלבד וניתנים לאימות פעם אחת בלבד, ולכן אסימון שנשמר במטמון נכשל עבור מבקרים אמיתיים; ה״פתרון״ המפתה של כיבוי הבדיקה מסיר את ההגנה בשקט.
- הרכיב מציג הודעת ״for testing purposes only״
- תג v3 נמצא בפינה
- הרכיב מוצג ומחזיר אסימון
- הספאם הפסיק — אבל גם הפניות האמיתיות
- נעשה שימוש במפתחות בדיקה ציבוריים וכל אימות מצליח
- אינטגרציית reCAPTCHA של תוסף הטופס כבויה
- השרת לעולם אינו שולח את האסימון לאימות, או מתעלם מהתוצאה
- מפתח האתר אינו רשום לדומיין, או שאסימונים במטמון פגו
בדיקה עצמית קצרה
- 1יש לפתוח את דף הטופס בחלון פרטי, לפתוח את כלי הפיתוח של הדפדפן ולחפש במסוף שגיאות של סקריפט ה-CAPTCHA.
- 2יש לבדוק שהרכיב אכן מופיע — פעם לפני אישור באנר העוגיות ופעם אחריו — ושהטופס אינו ניתן לשליחה כשהרכיב חסר.
- 3במסוף הניהול של הספק יש לבדוק שמפתח האתר כולל את הדומיין הפעיל (גם גרסאות כגון www), ושהמפתחות בתוסף הטופס או בקוד תואמים לו — ולא מפתחות מהתיעוד או מסביבת קדם-ייצור.
- 4בהגדרות תוסף הטופס יש לוודא שאינטגרציית CAPTCHA מופעלת עבור הטופס המסוים הזה; ב-reCAPTCHA v3 יש לבדוק שסף הציון גבוה מ-0.
- 5אם קיימת גישה לקוד, יש לאתר את האימות בצד השרת ולבדוק שהוא דוחה את השליחה כשהתשובה שלילית או כשהאסימון חסר.
- 6יש להחריג את דף הטופס משמירת דף מלא במטמון, או לוודא שנוצר אסימון חדש בדפדפן.
- 7יש לשלוח הודעת בדיקה אמיתית ולוודא שהיא מגיעה; יש לחזור על הבדיקה אחרי שינויים בערכת העיצוב, בתוספים או בכלי ההסכמה.
CAPTCHA הוא שכבה אחת, לא ההגנה כולה. בשילוב שדה מלכודת, בדיקת זמן וסינון בצד השרת, הגדרה שגויה במקום אחד אינה משאירה את הטופס פתוח לגמרי. לקבלת תמונה מהירה של מצב הטפסים, אפשר להזין את הדומיין ב-formexposed.com — הדוח מראה אם חלקי הגדרת ה-CAPTCHA שנראים מבחוץ תקינים.