ערכתי לאחרונה בתאריך 14.10.14 בשעה 03:06 בברכה, ליל קיץ
אין באמת דרך שתוכל למנוע ב-100% את השירות שירצה לסרוק אותך,
אבל כן תוכל לעשות לו חיים מאוד קשים (עד רמה שהוא יכול להתייאש).
חשבתי כל היום על מה היה גורם לי לירצות לירות לעצמי בראש כשהייתי מנסה לסרוק אותך באופן אוטומי, להלן התשובות:1) ליצור תוכן צד לקוח מעורבל
נתנו פה אחלה טיפים למעלה, ביניהם הצגת תוכן שנשאב מתוך קובץ css. לא בלתי אפשרי לעקיפה, אבל כן יכול להיות קצת כאב ראש ראשוני.
2) CSRF TOKEN
תעביר את השירותים שמספקים את המידע שלך לאתר למקום חיצוני (REST JSON SERVICE), שיהיה ניתן לגשת ממנו רק עם valid token, שיהיה נניח תקף רק לשעה.
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet
שוב, גם את זה אפשר לעקוף ע״י כך שהקרולר יטען מחדש את העמוד המקורי שלך כשהוא לא valid יותר וישיג טוקן חדש.
יהיה לך קל ככה להשיג את ה ip של זה ששואב ממך ולחסום אותו פיזית,
כי סביר שיהיו לו מספר חריג בקשות עם token לא תקף .
אבל שוב - גם את זה אפשר לעקוף ע״י פרוקסי פשוט.
3) גישה למידע רק באמצעות התחברות + שילוב סעיף 2
המשמעות היא מתן גישה למידע שאתה רוצה להסתיר רק למשתמשים מחוברים בלבד (בשילוב עם captcha).
כמו שכתבתי,
כשהמשתמשים רשומים בדטאבייס, הרבה יותר קל לך באופן טבעי לשלוט במי ששולף ממך מידע:
* אתה יכול לנטר בקשות חריגות:
אם למשל משתמש x שואב ממך יותר מדי מידע, אתה יכול פשוט לנתק אותו מהמערכת.
הקוקי של הקרולר כבר לא יהיה תקף והוא יצטרך לבצע login מחדש, כשהוא יגיע ל captcha.. הוא ייתקע. מישהו יצטרך לחבר את הקרולר בצורה ידנית .. וזה באסה.
* אתה יכול לבצע ניתוק אוטומטי של משתמשים כל שעה. שוב, הבוט יגיע לקאפצ׳ה כל שעה וחוזר חלילה לסעיף הקודם.
כן, זה ייפגע בחוויית השימוש באתר. אבל אם אתה פדנט.. לך על זה.
* התחברות לאתר תהיה בעזרת csrf token תקין.
* הרשמה תהיה בעזרת captcha בלבד בשילוב xsrf (סעיף 1), כך שגם אם הבוט ירצה הוא לא יוכל להירשם אוטומטית, מישהו יצטרך לעזור לו.
* דרך יפה למנוע את דרך השגת ה token תהיה על ידו העברתו דרך ה headers למשל, עוד מכשול למתכנת הסקריפט.
4) בדיקת חריגות פיירוול
כאמור מלמעלה,
להריץ מנוע צד שלישי שינתח את הבקשות לאתר ויחסום פיזית, באופן זמני או מלא, בקשות ״לא טבעיות״.
5) במידה ואתה לא יכול להשתמש (משום מה) בשירות REST חיצוני לקבל דטא מהשרת,
אתה יכול כמו שאמרו לבנות איזשהו אלגוריתם שמערבל את המידע ב source של ה html ומציג אותו מסודר רק ע״י רינדור js. עוד פעם, לא משהו שאי אפשר להתגבר עליו בעזרת קצת תושייה (ו-phantomjs).
6) - בדיקת referer. לבדוק שהריפרר הוא אכן מהדומיין שלך. שוב, לא שאי אפשר לעקוף את זה, זה לוקח בדיוק מאייה וחצי, אבל זה עוד קש שאולי ישבור את גב הגמל.
7) עבודה אל נתונים מול POST בלבד, או אפילו לנצל מבני בקשות אחרות (PUT או DELETE למשל).
גם את זה אני אעקוף בפחות זמן מאשר ייקח לי לעשות אפצ׳י, אבל שוב.. אנחנו רוצים לשבור את הגמל וזה עוד קש.
8) לסעיף 8 אני קורא הפתרון הסופי.
יסלחו לי הצוררים אימח שמם שהעתקתי מהם את הכותרת.
הפתרון הסופי מדבר על הצגת כל התכנים באמצעות תמונות שנטענות בצורה דינמית מהשרת, ועל הקריאות אליהם חלים כל הסעיפים שנכתבו כאן למעלה.
זה יצריך עבודה של המתכנת אל מול מנוע OCR, ואתה תוכל לעשות לו חיים עוד יותר קשים על ידי כך שתוסיף אלמנטים שישבשו את תהליך המרת (כמו בקפאצ׳ה). אני חושב שמיותר לציין כמה בעיות זה גורר, הן מבחינתך והן מבחינת המשתמש.
--
אני באמת חושב שאם תיישם את כל הכללים שכתבתי, ותקפיד שלא יהיו לך חורי אבטחה - אתה תגרום למתכנת שירצה לסרוק את האתר שלך להצמיח כמה שיערות לבנות מהראש מהר מאוד,
יכול להיות שהוא אפילו יוותר באמצע.
מתכנת עד רמה ממוצעת יוכל להתייאש ולוותר על חלק מהסעיפים כאן כי לא יוכל להתגבר עליהם.
מתכנת ברמה גבוהה יצליח להתגבר על כל הבעיות אם יקדיש לזה המון זמן ומחשבה, אך זה ייצור לו מנוע שסורק עם המון בעיות גישה,
כזה שיצטרך בד״כ מענה ידני כדי שיוכל לחזור לעבוד.
צא מנקודת ההנחה שכבר כתבו כאן,
מה שהלקוח יכול לראות גם מי שסורק אותך יכול לראות.
המטרה שלך היא לעשות לו כמה שיותר חיים קשים עד שהוא יצליח לעשות את זה (ואז, לחסום אותו וחוזר חלילה).