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

בחזרה לעמוד ראשי


זה ציפור! זה מטוס! זאת האות W? (סיפורה של captcha)

בשנים האחרונות הליך הרשמה אינטרנטי לא יכול להיות שלם ללא רכיב הCAPTCHA.
הcaptcha (ראשי תיבות של:completely automated public Turing test to tell computers and humans apart) או בשמה העממי – "התמונה המוזרה שגורמת לי לנטוש את העמוד בצעקות", היא מבחן שמטרתו היחידה להבדיל בין משתמש אנושי לבין מחשב.
הcaptcha משמשת כמבחן turing הפוך, אותו מבחן turing הומצא על ידי Alan Turing ומטרתו היתה להבדיל בין אינטילגנציה מלאכותית ובין אינטילגנציה אנושית. בהשוואה, הcaptcha נוצרת על ידי מכונה ומגיעה להבדיל את המשתמש האנושי לבין המכונה.
במובנים פשוטים יותר, הcaptcha היא מבחן השוואה ויזואלי למניעת חדירה של בוטים אוטומטים או תוכנות ספאם למיניהן מתוך ההנחה שלמכונות קשה יותר לזהות צורות מאשר לבני אנוש.
ופה בדיוק קבור הכלב, אם נסתכל על המבחנים שנמצאים היום ברשת נגלה שהם לא מצליחים לעמוד בקרטריונים של מבחן טוב, מה שגורם לחווית משתמש לא נעימה ולתופעה של נטישת האתר – דווקא בעמוד הכי חשוב שלו, עמוד ההרשמה.
מצד שני קשה להתווכח עם מבחן המציאות, המון אתרים (ביניהם גם google וגם yahoo) ממשיכים להשתמש בcaptcha בטפסי ההרשמה שלהם – כנראה מחוסר פתרון טוב יותר. כך שמה שנשאר לנו לעשות זה לנסות להפוך את החוויה של שימוש בcaptcha לידידותית יותר.

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

קל להבנה

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

קל לביצוע

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

קשה לפריצה

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

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

בבדיקת השוק נראה שמפתחים לא נוטים להבין מה בדיוק עושה captcha לקשה לפריצה. הגישה הנפוצה של: "בוא נחבר כמה פטרנים משוגעים ו/או כמה צבעים לטסקט ונקווה לטוב" כבר מזמן לא עובדת, לא על בני האנוש ולא על המכונות. היום בקלות יחסית אפשר למצוא פוסטים בנושא שמסבירים למפתחים מהי captcha טובה וכיצד אפשר ליצור אחת (רוב הכותבים אגב הם האקרים), למתעניינים בנושא אפשר להתחיל כאן. עוד לינק שימושי ומעניין: אתרו של האקר הסיני (ששמו בתרגום חופשי הוא כנראה: פורץ-קוד סאן) שממש מציג מחירון למי שליבו חפץ בסקריפט פריצה לסוגי ה captcha השונים.

אחרי שהגדרנו את המאפיינים בואו ונבחן מספר דוגמאות שמצאתי באדיבות רשת האינטרנט:

דוגמה1: מיאו, חתולה!

מיאו, חתולה

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

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

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

דוגמה4 : המתמטיקאי
זו או בדיחה מאוד מצחיקה (אני חנון, מודה) או captcha מאוד גרועה,
(התשובה אגב היא 0).

דוגמה5:
תודו שזה נראה כמו משהו שמפתח חשב עליו אה? (נקודה למחשבה: כנראה שככה היו נראים כל האתרים אם לא היו מאפיינים ומעצבים בעולם).

דוגמה6: the mighty Google
מאוד קשה לפריצה וקל להבנה אך עדיין קשה לביצוע, לא מעט אנשים לא מצליחים לזהות במדויק את האותיות.

אם נרכז את התוצאות מהמדגם בטבלה היא תראה כך:

אפשר לראות בבירור שאין פתרון שהוא גם פשוט להבנה גם קל לביצוע וגם קשה לפריצה.

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

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

netcraft captcha

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

בפוסט זה לא התייחסתי לסוגיית הנגישות אבל זה לא אומר חלילה שאני ממעיט בחשיבות נושא זה.

Bookmark and Share


8 תגובות לפוסט ”זאת ציפור! זה מטוס! זאת האות W? (סיפורה של captcha)“

  1. אני אישית דוגל בשיטת ה-Anti Captcha - לבדוק שהודעה נשלחה ע"י בוט ואם כן לא לעשות איתה כלום.
    מוסיפים input-text-hidden עבור הבוט, אם ימלא אותו ואם הוא מלא אז לא מסננים את בקשת ה-HTTP.

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

  3. התשובה היא לא 0 היא 1 cos 0 = 1

    ולעניין,
    הטרחה בלענות על שלוש שאלות היא גדולה מדי לדעתי.

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

  4. סדרה של 3 שאלות נראית לי לא פשוטה בכלל עבור המשתמש, שככל הנראה ינטוש לפני שיענה על כ 3 ה-captcha שקיבל. שאלה אחת היא כמובן חלשה מדי מבחינת אבטחה (סיכוי של 20% גם אם נוסיף עוד סמל כדי שתהיה בחירה בין 5).

    שילוב של "דוגמה 1″ עם הרעיון שלכם נראה לי סביר יותר (וגם קיים כבר ברשת): הצגה של 5-6 סמלים ששלושה מהם הם סמלים שונים של פרח והאחרים אינם פרחים, כאשר על המשתמש לבחור את שלושת הפרחים, נראית לי סבירה יותר.

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

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

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

    והתשובה היא אכן 0 , זה cos של 90 ולא של 0.

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

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

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

לכתוב תגובה

(חובה לפחות לרשום שם!!!)

(...אף אחד לא יראה את זה)

(תפרסם/י את עצמך! שידעו מאיפה את/ה!)