DCSIMG
נכון שה CAPTCHA באתר הוא סתם לעצבן את המגיבים ? לקרוא ולא להאמין - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

נכון שה CAPTCHA באתר הוא סתם לעצבן את המגיבים ? לקרוא ולא להאמין

 

אחד מהתחביבים שלי, זה לבדוק security של אתרים, אתם יודעים אפילו דברים פשוטים כמו xss, Sql Injection ועוד.
לפני כמה ימים רציתי להוריד את קובץ ה css של האתר, כדי לראות איזה classes אני צריך לדרוס אם אני רוצה לשנות את המראה של הבלוג שלי כמו שגיא כתב כאן.
אז כשהסתכלתי על ה source של האתר ראיתי שם של פונקצייה ב java script שמיד הדליק לי את כל נורות האזהרה, אז חבשתי את כובע ההקאר שלי והתחלתי להסתכל על הקוד,
 
לפני שנתחיל, שווה שנייה להבין למה צריך CAPTCHA, לכאורה הסבה העיקרית היא שלא לאפשר למתכנתים לכתוב קוד שימלא את האתר בספאם, או לדוגמא באתר של בזק, אחרי שמבקשים חמשה שמות צריך להקליד את ה CAPTCHA, שם זה כדי למנוע ממתכנתים לכתוב תוכנה שתסרוק את האתר שלהם ותעשה חיפוש הפוך (לפי מספרי טלפון, נניח),
 
אז בואו נראה את הפונקציה שהקפיצה אותי.
 
אז הנה הפונקצייה לפניכם:
 
function ValidateCaptcha(val, args)
{
    var value = args.Value;
    var nameEQ = "CAPTCHA=";
    var captchaNumbers;
    var ca = document.cookie.split(';');
 
    for (var i = 0; i < ca.length; i++)
    {
        var c = ca[i];
        while (c.charAt(0) == ' ')
        {
            c = c.substring(1, c.length);
        }
 
       if (c.indexOf(nameEQ) == 0)
       {
            captchaNumbers = c.substring(nameEQ.length, c.length);
       }
    }
 
args.IsValid = captchaNumbers == value;
}
 
אז מה אנחנו רואים, שלמעשה הבדיקה מתבצעת בצד הקליינט, ואיך יודעים מה המספרים שבתמונה, זה נשמר ב cookie,
ישר אני פותח את ה Fiddler כדי לראות, מתי נשמרה cookie, ואז אני רואה שאכן בתוך ה html  של כל פוסט יש הפנייה לדף http://blogs.microsoft.co.il/blogs/adir_ron/archive/captcha.ashx
 
שלמעשה זה התמונה, ובזמן הטעינה שלו הוא שומר ב cookie את המספר.
 
אם אני הייתי באמת הקאר, הייתי ממש נעלב, כאילו מה עבר למתכנת בראש כשהוא כתב את הקוד הזה,
למעשה גיא אמר לי שכבר פורסם פוסטים בנושא, אז חפשתי ובאמת מצאתי כמה פוסטים שמדברים בערך על הנושא, גם Dotmad ציין כאן שלפעמים אי אפשר להגיב ואוהד ענה שצריך לעשות reload לתמונה, עכשיו זה ברור למה זה עובד, מכיון שה cookie נטעון שוב.
 
אז אם כבר דיברו על הנושא, למה אני בכל זאת מדבר על זה שוב, כי כשקצת חקרתי יותר לעומק, גיליתי דבר מדהים. רק המשתמש המסכן בדפדפן צריך להקיש את המספרים, אם אתה ספאמר שמנסה לגשת מקוד, אתה לא צריך אפילו להתאמץ לקרוא את ה cookie, ומדוע, כי למעשה זה validator, שמקושר על הלחצן, שלפני שנגשים לשרת, לבדוק האם המספרים מתאימים, אבל אם אני נגש דרך HttpWebRequest או אפילו דרך WebClient, אני לא עובר את הבדיקה, כי לא לחצתי על שום לחצן,
 
ולכן אני אומר שה CAPTCHA זה נטו כדי לעצבן את המגיבים, ואין לזה שום תועלת לגבי ספאם.
 
ואם זה לא היה עצוב זה היה מצחיק.
 
נ.ב. לפני שפרסמתי את הפוסט שאלתי את מיכל האם זה בסדר לפרסם פוסט בנושא הזה, (אולי ספמארים יקפצו על המציאה)
אז היא ענתה לי, שזה נתון להחלטתי, אבל מומלץ שאם אני מפרסם שאני קודם יפנה את השאלה ל COMMUNITY SERVER לראות האם הם מודעים לזה או לא,
אז שלחתי אליהם את השאלה, והנה התשובה שלהם, לעיונכם:
 

 
Hi Shlomo,
Yes, that site is definitely using our software, however out of the box Community Server does not use that captcha system, and it was not added by Telligent. We also do not manage that site, so I'm afraid I can't assist you a whole lot with this issue :-(

Thanks,
Ryan Howard

 
בכל מקרה החלטתי לא להדגים איך כותבים את הקוד של הוספת תגובות מקוד.
פורסם: Dec 30 2008, 07:54 PM by Shlomo | with 5 comment(s)
תגים:,

תוכן התגובה

עומר ון קלוטן כתב/ה:

וואו. זה טיפשי. אבל באמת.

לא פלא שאני מקבל *המון* ספאם דרך הבלוג שלי פה...

# December 30, 2008 10:59 PM

Maor David-Pur כתב/ה:

שלמה, אתה תותח!

פוסט מעניין מאוד - בהחלט מסביר בעיות רבות...

# December 30, 2008 11:21 PM

Avi Pinto כתב/ה:

שועל משקיען,

באמת תהיתי מדוע בכל פעם אני לא מצליח להגיב, ומופיעה לי הולידציה על התמונה המעצבנת.

כל הכבוד על ההשקעה.

# December 31, 2008 1:01 AM

Rotem Bloom כתב/ה:

אין מה לומר פשוט בדיחה עצובה.

# December 31, 2008 4:14 PM

שלמה גולדברג כתב/ה:

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

# March 4, 2009 3:18 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 5 and 5 and type the answer here:


Enter the numbers above: