רשימת קבצים

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

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

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

כאשר מנסים לגשת אל דומיין כלשהו, אך לא מגדירים שם קובץ, באופן אוטומטי המערכת מחפשת אחר קובץ בשם index עם סיומות רלוונטיות. כברירת המחדל, הקובץ הראשון אותו מחפש האפאצ'י הוא קובץ ה html ורק לאחריו קובץ ה php. כלומר, ברגע שמעלים קובץ index.html, אם השרת לא מוגדר נכון באופן אוטומטי הוא מקבל קדימות לקובץ ה PHP. כלומר כל מה שפורץ צריך לעשות זה להעלות קובץ index.html אל השרת ומעכשיו ועד שתסירו אותו – זה מה שיראו המבקרים שלכם.

איך אפשר למנוע את זה? הדרך הפשוטה והקלה היא להפנות באופן אוטומטי את כל הבקשות עבור index.html אל index.php בעזרת קובץ ניהול הגישה.

פותחים את קובץ ה .htaccess (נקודה בתחילת השם) ומוסיפים בראשו את השורות הבאות

RewriteEngine on
RewriteRule index\.html index.php [NC,R]

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

מעכשיו, כל מי שינסה לגשת אל קובץ ה index.html יועבר באופן אוטומטי אל index.php.

אבל איך הוא הגיע לשם?

הרבה אנשים חושבים שבשביל שמישהו יצליח להכניס להם קובץ לשרת, הוא צריך גישה ישירה אל החשבון שלהם (בד"כ את פרטי ה ftp). זו שגיאה נפוצה, ולמעשה, הפורץ לא צריך לדעת מה פרטי החשבון שלכם, הוא רק צריך גישה כלשהי לאחת התיקיות בשרת, אפילו של משתמשים אחרים. אם השרת לא אובטח כשורה והרשאות הקבצים לא עודכנו – הדרך להכניס קובץ index.html אל תיקיית השורש מצריכה לא יותר מאשר 15 שורות קוד, אולי אפילו פחות.

בעקבות הפוסט הקודם נתבקשתי להרחיב לגבי הרשאות הקבצים בלינוקס. דבר שלקחתי כברור מאליו (אני ורבים אחרים) והסתבר שיש לגביו חוסר בהירות רב. כפי שאמרתי בעבר, עבור וורדפרס (ואפליקציות php בכלל), הרשאות על כל הקבצים צריכות להיות 644 ועל כל התיקיות 755 – והנה ההסבר.


במחשבים בכלל, לכל קובץ יש שלושה מצבי גישה – קריאה, כתיבה, הרצה. בלינוקס מסמנים אותם בעזרת מספרים. כך למשל הסיפרה 4 מסמנת קריאה בלבד, הסיפרה 6 מסמנת קריאה וכתיבה והסיפרה 7 מסמנת קריאה, כתיבה והרצה.
בנוסף, מערכת ההרשאות של לינוקס מגדירה שלושה סוגי "מורשים". בעלים, קבוצה וכל השאר.
בעלים, הוא האדם שהקובץ הוא שלו. כך למשל, בתיקיית הבית אצלך בשרת, הקבצים מוגדרים שלך.
קבוצה לעומת זאת, פועלת בדיוק כמו שמה. כל האתרים המתאכסנים בשרת שייכים לקבוצת "אתרים" (המצאתי שם) ואל הקבוצה הזו שייך גם התהליך של האפאצ'י – שתפקידו להריץ את האתר.
לבסוף – כל השאר – זה כל האנשים שאין להם התיחסות מפורשת אל הקובץ. כך למשל, באיחסון שיתופי, האנשים שמאכסנים את האתר ביחד איתך על אותו השרת, מבחינת השרת הם "אחרים".

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

מה אומרת הרשאה 644 למעשה?
היא אומרת שלך, ולך בלבד, יש הרשאות קריאה וכתיבה אל הקובץ, לקבוצת השרת יש הרשאות קריאה בלבד וכך גם ל"כל השאר".

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

אותו הדבר לגבי תיקיות. הסיפרה 7 אומרת שיש לאותו משתמש גישה מלאה אל התיקיה – כלומר שהוא יכול לכתוב פנימה קבצים. אם תיקיית השורש שלך מוגדרת 777 (טעות מאוד נפוצה ומאוד מסוכנת שנגרמת פעמים רבות בגלל יאוש של משתמשים שלא מבינים את נושא מערכות ההרשאות) או 775 (גם נפוץ, מסוכן לא פחות) זה אומר שלקבוצת השרת יש הרשאה לכתוב קבצים אל התיקיה.

נחזור אל הדוגמא לעיל – כתיבה לתיקיה. כתבתי סקריפט שמחפש תיקיות שורש ומנסה להכניס אליהן קובץ Index.html

אם הקובץ קיים ואין לו הרשאת כתיבה – נכשלתי ואעבור לשרת הבא
אם הקובץ קיים ויש לו הרשאת כתיבה – הצלחתי, פרצתי והמשכתי.
אם הקובץ לא קיים ויש לי הרשאת כתיבה לתיקיה (775 או 777) – הצלחתי – יצרתי את הקובץ
אם הקובץ לא קיים ואין לי הרשאות כתיבה לתיקיה (755) – נכשלתי, הבא.

איך משנים? תלוי בתוכנת ה Ftp איתה אתם עובדים, ב filezilla למשל, יש ללחוץ קליק ימני על קובץ או תיקיה ולבחור ב file permission, בתפריט שיפתח יש לסמן את ההרשאות הרלוונטיות ולאשר. אם אתם מסמנים תיקיה, תיתווסף גם האפשרות להחיל את ההרשאות על הקבצים שבתוכן ועל תתי תיקיות.