טכניקות לזיהוי ולכידת בוטים חמקניים

כשתוכנה מתחברת לשרת HTTP הוא יכולה לדווח לו מי היא, באחד השדות שנקרא user-agent.
הסיבה היא שיתכן שיש לוגיקה ספציפית בצד השרת שמיועדת לדפדפן מסוים (למשל כי יש בו באג שדורש התייחסות שונה מצד השרת).
דפדפנים הם לא התוכנות היחידות שמתחברות לאתרי אינטרנט, גם בוטים (קיצור של רובוטים), הידועים גם בשמות הפחות מחמיאים עכבישים וזחלנים מתחברים.
בוטים לדוגמא הם רובוטים של מנועי חיפוש, שמאנדקסים את הדפים באתר כדי לאפשר חיפוש מהיר.
בוטים אחרים שמפועלים על ידי ספאמרים סורקים את הדפים בחיפוש אחרי כתובות אימייל, או שולחים תגובות ספאם בבלוגים ובמערכות אחרות.
אתרי אינטרנט רבים היום מייצרים את התוכן שלהם בצורה דינאמית, מה שיכול לבלבל ולהעמיס על רובוטים שמנסים לאנדקס את האתר.
בעיה נוספת היא שלפעמים יש חלקים באתר שבעלי האתר לא מעוניין שיאונדקסו על ידי בוטים, למרות שהוא רוצה לאפשר אליהם גישה חופשית לאנשים.
הפתרון לשתי הבעיות הוא קובץ בשם robots.txt, שנמצא בספריית השורש של האתר. הקובץ הזה, שלמרות שלא מוגדר בשום תקן, הפך לסטנדרט להגדרה של איזורים אסורים לבוטים.
הנה הקובץ של גוגל, שאגב יכול לחשוף שרותים מעניינים שלהם.
מטבע הדברים הבוטים הלא לגיטמיים מנסים להסתיר את הזהות שלהם כדי למנוע מהשרת מלהתגונן בפניהם, ולכן מזדהים בעזרת user-agent של דפדפנים נפוצים, בנוסף, בדרך כלל רובוטים כאלו גם לא מתייחסים לקובץ הrobots.txt, אחרי הכל – אם בעל האתר טרח לומר שאסור לבוטים להכנס לאיזור מסויים, אולי זה בדיוק האיזור שאותם בוטים ירצו לסרוק?
כמובן שיש גם בוטים לגיטימיים שפשוט כתובים רע או שמכילים באג שגורם להם להתעלם מהקובץ.
אפשר להשתמש בעובדה שרובוטים זדוניים מתעלמים מקובץ הרובוטים כדי לזהות ואפילו לחסום אותם.
נתקלתי ברעיון כאן.
הרעיון פשוט למדי:
נכניס לקובץ הרובוטים קובץ שאסור לקריאה על ידי רובוטים.
נכניס לדפים שלנו לינק בלתי נראה שמפנה אל אותו קובץ.
מכיוון שהלינק הוא בלתי נראה, אנשים לא יכנסו אליו בטעות.
כל הפעלה של הקובץ הגיעה בעצם מרובוט סורר, מה שיאפשר הוספה שלו לבסיס הנתונים של הרובוטים (הסוררים) וגם חסימה של כתובת האי-פי שלו כדי למנוע ממנו לבצע באתר את מעשיו הנלוזים.
דרך נוספת לזהות בוטים שלא מזדהים בuser-agent שלהם היא באמצעות זיהוי תבנית הכניסות שלהם לאתר.
בוטים נוטים להיות מאוד יסודיים ובדרך כלל סריקה של בוט, במיוחד כזה שלא מזדהה, תהיה בסדר גודל של כמה מאות דפים בכל פעם, בהפרשים קצרים מאוד בין כניסה לכניסה.
אפשר להשתמש בידע הזה כדי לזהות בוטים, מחפשים סדרה ארוכה של כניסות מאותה כתובת אי-פי, כאשר ההפרשים בין כניסה לכניסה קצרים מדי מכדי שזה יהיה סביר שבן אדם ביצע אותם.

אני אממש את שתי הטכניקות באיזה שהוא שלב בFireStats כדי לזהות בוטים שכאלו.
במלכודת הבוטים אני אשתמש כדי לזהות בוטים בזמן אמת, ואילו בטכניקה השניה אני אשתמש כדי לזהות בוטים רטרוקטיבית כדי לנקות את בסיס הנתונים מזבל.

FireStats 0.9.5-beta

שחררתי את FireStats 0.9.5.
חדש:
* תרגום לעברית
* דפים פופלריים
* תצוגה משופרת של עצי הדפדפנים ומערכות ההפעלה
* דף הכניסה של FireStats עבר מעריכה וניהול ללוח הבקרה.
בנוסף, יש לוגו חדש לFireStats, באדיבות Arun

FireStats logo

דף בית חדש לFireStats

הקמתי דף בית חדש לFireStats שרץ על trac המצויין.
trac תומך בוויקי, מערכת לניהול באגים ובקשות לשיפור, מערכת לעיון בקוד ועוד.
כדי ליצור ticket או לשנות את הוויקי, צריך להרשם (יש לינק למעלה)
תעיפו מבט.

FireStats 0.9.4-beta

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

תולדות FireStats

נשאלתי למה אני כותב את FireStats, מה מניע אותי.

אז קצת היסטוריה:
בראשית, היה קאונטרייז, וראה עמרי כי טוב.
ובאו כניסות, ובאו גם ורובוטים כחול אשר על שפת היום, וראה כי רע.
והוסיף לקוד של קאונטרייז בוט אחר בוט, וראה כי טוב, עד שנמאס.
ותיקן את קאונטרייז, ויקח בוטים מקובץ, וישלח התיקון לאנדרס, ולא ענה.
וינג'ס, וינג'ס, עד שהתחיל את קאונטרייז 2, וישפר, וראה כי טוב.
ויקרא את הקוד של קאונטרייז, וראה כי מלא היה בכפילויות ובברדק, ויבין כי רע.
ויאמר לחבריו, למה לכם הקאונטרייז הזה, בואו אלי, ואני אראה לכם את האור, אני אראה לכם את FireStats.
ויכתוב, ויראה כי לא ידע PHP, וילמד,
ויכתוב, ויראה כי לא ידע HTML, וילמד.
ויכתוב, ויראה כי לא ידע CSS, וילמד.
ויכתוב, ויראה כי לא ידע JavaScript, וילמד.
ויכתוב, ויקודד, ויכתוב, וישחרר גרסא ראשונה לציבור.
ויחזור אנדרס מחופשה, ויראה כי קם בן ונכד לקאונטרייז, וישמח.

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

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

FireStats 0.9.2-beta

גרסא חדשה של FireStats מסתובבת ברחובות!

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

ניתן להשיג בשרתים המובחרים.

FireStats 0.91 – Beta

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

FireStats 0.9- Beta

אחרי הרבה ימים ולילות, שחררתי בשעה טובה את גרסאת הבטא הראשונה של FireStats.

מילת אזהרה למשתמש האמיץ:
בניגוד לבטות של גוגל, זו בטא אמתית.
זה אומר שיש באגים שאני מכיר, וגם כאלו שאני לא מכיר עדיין.

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

כמו תמיד, כל הפרטים בדף הבית של FireStats.

Counterize2 – עדכון

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

אפשר להוריד אותו כאן.