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