X

נעים להכיר: php open_basedir

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

Open_Basedir הינה פונקצית php הנשלטת בצד השרת (כלומר, לרוב לא מדובר בפונקציה שלמשתמש יש גישה אליה).
מהות הפונקציה היא חסימת הגישה של המשתמש לתיקיות נקודתיות בלבד- דבר שאומנם יכול להשמע לנו כמובן מאליו, אבל במערכת Linux, בהינתן הרשאות מסוייימות ובהנחה שאני יודע למפות את הקובץ אלינו אני מנסה להגיע, ייתכן ואני אצליח להגיע אליו גם אם הוא לא נמצא תחת התיקיות שמותר לי לגשת אליהן במסגרת ההרשאות הרגילות שלי.

על מנת להסביר את המצב למעלה, נדמה מצב:

בעל חשבון האחסון:
במצב "תקין", בעל החשבון שיכול לגשת באמצעות ה-FTP או ממשק הניהול, כאשר הוא ניגש ל-FTP (לדוגמא), הוא יכול לראות אך ורק את התיקיה שהוקצתה לו במסגרת חשבון האחסון – כלומר, הוא לא רואה חשבונות של משתמשים אחרים.

מצד שני, חשוב לזכור כי ישנן צורות רבות לגשת לקבצים שהן לא FTP או ממשק הניהול.

לדוגמא, פונקצית Include או Require של Php מאפשרות לגשת לקבצים מסויימים, כאשר אין "מערכת הגנה" כלשהי המפריעה לנו לגשת לקבצים של משתמשים אחרים (פרט למערכת ההרשאות של Linux, אך כפי שראינו במאמרים קודמים, לפעמים יש צורך במתן הרשאות מסויימות לאתר על מנת שיעבוד באופן תקין).

התוקף:
עד כאן הסיכון קיים אך עדין נמוך, מכיוון שבפועל – אין לתוקף אפשרות למפות את התיקיות של המשתמשים האחרים בשרת, אבל הוא כן יכול "לנחש" את המיקום, וכך (לדוגמא), יוכל לבצע Include (באמצעות פונקצית ה-php) לקובץ המכיל (שוב, רק לדוגמא) את סיסמאות הגישה למסד הנתונים (דוגמא קלאסית היא קובץ ה-wp-config.php של wordpress) – ואם התוקף הגיע לשם.. השמיים הם הגבול.

אז איך התוקף יכול "לנחש" משהו כזה?
פשוט למדי, רוב ספקי האחסון (בארץ ובעולם) עובדים עם מספר מאוד מצומצם של ממשקי ניהול מסחריים.
ממשקי הניהול, בין השאר, יוצרים את ה"היררכיה" של הקבצים והתיקיות בשרת.

כלומר, בסופו של דבר, משתמש X אומנם מארח אתר wordpress בשם hello.com ומשתמש Y מארח אתר wordpress בשם goodbye.com .. אבל 2 האתרים יושבים במיקומים דומים בשרת:

/home/<username>/public_html/

בדוגמא זו (האופיינית לשרתי Cpanel או DirectAdmin) כל מה שנשאר לפורץ "לנחש" הוא שם המשתמש.

גם זאת לא קשה במיוחד לבצע, היום רוב ספקי האחסון פותחים את שמות המשתמש באופן המקביל לדומיין, כלומר – אם ניקח את הדוגמא הקודמת (goodbye.com), לרוב שם המשתמש יהיה נגזרת של הדומיין (לדוגמא: goodbyecom).
כך שבסופו של דבר, אם התוקף יבצע Include לתיקית /home/goodbye/public_html ויתחיל לחפש שם קבצים.. הוא יצליח.

מדאיג נכון?

הפתרון הוא פשוט, בדקו מול חברת האחסון שלכם האם בשרת שלכם מופעלת אפשרות ה-Open_Basedir וכמו כן כיצד היא מוגדרת באופן מדוייק.למה? אם כל משתמש יכול לגשת לתיקית / (תיקית השורש בשרתי Linux, מקביל בעצם ל-c: ב-windows).. לא עשינו דבר.

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

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

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

מנהל מערכת: חלק מחברת SPD Hosting החל משנת 2006. כחלק מהתפקידים שלי בחברה, אני אחראי על תוכניות ההכשרה של עובדים חדשים. חי ונושם Hosting, קוד פתוח ו-Linux (ויש גם מילה טובה ל-Windows)
Related Post