חסימת גישה ב-Nginx לפי User Agent (מזהה משתמש)

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

אז הוספתי הגדרה ב-Nginx שיחסום כל בקשה שמגיעה מ-User Agent:

if ($http_user_agent ~* (Wget) ) {
return 403;
}

כל בקשה שתגיע מ-User Agent שמכיל Wget תתקבל בשגיאה 403 (הבקשה אסורה), שימו לב שאת if ניתן למקם גם ב-location (כדי לחסום תיקייה ספציפית) וגם ב-server, כדי לחסום את כל השרת ל-Wget.

מילון -> מזהה משתמש (User Agent): 

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


ChromeHeaders

Header לדוגמא של דפדפן Chrome ב-Windows 7.
הדפדפן בעצם "אומר לשרת: "אני רוצה את קובץ X, מהאתר Y אני יודע לדבר בפרוטוקול Z, הגולש יודע עברית ואנגלית, אך מעדיף עברית" ועוד.

כחלק מהבקשה, הדפדפן ישלח מזהה משתמש שכולל את שם וגרסת הדפדפן, ובחלק מהדפדפנים גם את מערכת ההפעלה (כמו ב-iPhone ו-Android). לפי מזהה המשתמש השרת יודע באיזה מכשיר משתמש הגולש ולכן ידע איזה עיצוב מתאים לגולש, עיצוב שתואם ל-PC או ל-iPhone וכו'.

פורסם בקטגוריה כללי. אפשר להגיע לכאן עם קישור ישיר.

3 תגובות על חסימת גישה ב-Nginx לפי User Agent (מזהה משתמש)

  1. מאת בר‏:

    החסימה הזו מיותרת.
    בעזרת הפרמטר -U ניתן לעקוף בקלות.
    -U, --user-agent=AGENT identify as AGENT instead of Wget/VERSION.

    • מאת אבי קינן‏:

      אתה צודק. באמצעות curl אפשר לדלג על החסימה הזאת (באמצעות wget אי אפשר).

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

  2. מאת גיא‏:

    אפשר לזייף בשנייה UA, מיותר לטעמי, ה-UA צריך לשמש עבור זיהוי סלולרי חוץ מזה אין מה לגוע שם, זה לא עוזר בשום מצב.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *