מודולי העלאת קבצים הם אחד הקישורים החלשים ביותר ביישומי אינטרנט. כל טעויות שנעשו, אפילו כאלה שאתה מחשיב כקטנות, עשויות לגרום לכך ששליטה בשרת תיפול ישירות לידיו של תוקף סייבר. מסיבה זו, מפתחי תוכנה צריכים לדעת את הטעויות הנפוצות ביותר וכמה שיטות תקיפה שיכולות להתרחש.
אז מה זה שיבוש בצד הלקוח? איך אתה יכול להילחם בזה כדי לשמור על בטיחות האתרים שלך, והמשתמשים שלך?
מה זה שיבוש בצד הלקוח?
שיבוש בצד הלקוח הוא הרעיון הבסיסי של התקפות יישומי אינטרנט בכללותו. במילים פשוטות, זה אומר שאתה כבר לא יכול לסמוך על אף אחד מהנתונים שאתה שולח למשתמש. בנוסף, שיבוש בצד הלקוח הוא אחד היסודות של פיתוח אפליקציות מאובטח. אם אתה בוחן את מודול העלאת הקבצים איתו אתה מתמודד ושקול התעסקות בצד הלקוח, הנתונים שאתה לא יכול לסמוך עליו כוללים:
- שם הקובץ שהועלה.
- סוג התוכן של הקובץ שהועלה.
שני הפריטים האלה נמצאים איפה יש לך הזדמנות לרשימת היתרים כמפתח תוכנה. נתוני השם של הקובץ שהועלה יכולים להכיל כל דבר עם שיבוש בצד הלקוח. עם נתוני Content-Type של הקובץ שהועלה, גם אם התוקף מעלה קובץ .exe, קובץ זה עשוי להופיע כתמונה/jpeg במערכת.
הרחבת קובץ ורישום לבן
בזמן פיתוח מודולים להעלאת קבצים, הדבר הראשון שצריך לעשות הוא תהליך הרשימה הלבנה עבור סיומת הקובץ. לדוגמה, משתמש רוצה להעלות קובץ בשם "muo.jpeg". עליך לוודא שסיומת הקובץ הזו שהמשתמש רוצה להעלות היא .jpeg. לשם כך, המערכת צריכה לבדוק את הקובץ שהועלה ולראות אם הוא אחד מהסיומות המותרות לקבצים. כדי להבין איך אתה יכול לעשות זאת, בדוק את קוד ה-PHP הפשוט הבא:
$file_parts = pathinfo($filename);
החלף($file_parts['הרחבה'])
{
מקרה "jpg":
לשבור;מקרה "עטלף": // או exe, dll, so וכו'.
לשבור;
מקרה "":
מקרהריק: // אין סיומת קובץ
לשבור;
}
אתה יכול לעשות זאת עם בלוק קוד דומה לזה שלמעלה, או שאתה יכול להשתמש במחלקות ובפונקציות שמספקות המסגרת שבה אתה משתמש.
היזהר לא ליצור נתוני סיומת קובץ על ידי ניתוח שם הקובץ לפי תו הנקודה (.), מכיוון שהתוקף יכול לעקוף את שלב הבדיקה הזה עם שם קובץ כגון "muo.jpeg.php".
מהו מידע מסוג תוכן?
מידע מסוג Content-Type הוא פיסת מידע שנשלחת בבקשת HTTP עבור כל העלאת קובץ. דפדפן האינטרנט מזהה מידע זה ומוסיף אותו לבקשה שנשלחה. התוקף יכול לנסות לשנות את המידע באמצעות שיבוש בצד הלקוח ולעקוף אימותים בצד השרת. בשלב זה, מפתחים זקוקים למנגנון בקרה כדי לבצע אימותים על המידע מסוג Content-Type. זה לבדו לא יספיק; ובכל זאת, זה נושא שחשוב למפתחים לשים אליו לב.
נניח שאתה מקודד מנגנון לבדיקת סיומת הקובץ בצורה נכונה, ואתה מקבל רק קבצים עם סיומת .jpeg. בנוסף למנגנון הזהירות הזה, אתה יכול לבדוק את המידע מסוג Content-Type רק בפנים מארז ולקבל רק קבצים עם מידע תמונה/jpeg, רמה נוספת של הגנה מפני מתקפות סייבר
קבצי פלאש SWF ושלבי התקפה
סיומת הקובץ ונתוני Content-Type לא אומרים דבר לדפדפני אינטרנט התומכים בתוספים כגון Adobe Flash Player. למרות שהתמיכה בנגן זה כבר לא זמינה, עדיין ניתן להתקין את הקבצים הקשורים הללו במערכות רבות, למרות שפלאש נשאר סיכון אבטחה. במערכת שלא נקטה באמצעי הזהירות הרלוונטיים, אפשר לקרוא לקובץ Flash עם ה
כדי לנקוט בפעולה, מפתחים צריכים לדעת מהם המסלולים שפושעי סייבר יכולים לנקוט. הנה איך זה יכול לקרות:
- התוקף הזדוני מעלה SWF (פורמט קובץ Adobe Flash) בשם "image.jpeg" לאתר היעד. במהלך תהליך ההעלאה, מאושר באימות הרשימה הלבנה שלקובץ שהועלה על ידי התוקף יש סיומת .jpeg. אימות מסוג תוכן עוקף עם שיבוש בצד הלקוח. תארו לעצמכם שהקובץ הזה, שהועלה על ידי שחקן האיום, עובר אל "www (dot) target-site (dot) com/images/images.jpeg".
- נניח שלתוקף יש אתר שנקרא attacker (dot) com. התוקף קורא לקובץ image.jpeg שהועלה לאתר היעד באתר זה, באמצעות ה-
- משתמש תמים נכנס ל-attacker (dot) com. אתר זה קורא לקובץ SWF בכתובת www (dot) target-site (dot) com/images/image.jpeg ומבצע את הפקודות שניתנו ל-SWF.
- באמצעות זה, תוקף הסייבר יכול ליצור פעולות בקשת HTTP עבור כתובת אתר היעד (dot) com מבלי שמשתמשים רגילים ישימו לב. עם בקשות אלו, התוקף ישתמש בסשן של המשתמש התמים ויעקוף בדיקת CSRF.
כדי להבין את תרחיש ההתקפה הזה בצורה ברורה יותר, שקול שהקוד הבא נמצא ב-HTML
סגנון="גובה: 1 פיקסלים; רוחב: 1 פיקסלים;" נתונים="www.target-site.com/images/image.jpeg" סוג="אפליקציה/x-shockwave-flash" allowscriptaccess="תמיד" flashvars="c=קריאה&u=משהו"
אחד הפתרונות הטובים ביותר הוא לגשת לקבצים שהועלו עם העלאת קבצים דרך תת-דומיין אחר. בתרחיש שהוזכר לעיל, אתה יכול לגשת לקבצים סטטיים לא מאותו דומיין, אלא מתת-דומיין אחר באופן הבא: "http (קולון)//file.target-site (dot) com/images/image.jpeg".
פתרון נוסף הוא להוסיף תוכן-נטייה: מצורף מידע לתגובת HTTP כאשר אתה מקבל בקשה לגישה לקבצים שברצונך להעלות.
נקוט באמצעי זהירות עבור פגיעויות העלאת קבצים
כל העלאת קבצים שמשתמשים יכולים לבצע לאתר מסוכנת, ולכן זו אחת הבעיות שמפתחים צריכים להקדיש להן את מירב תשומת הלב. אם תוקפים מגלים פגיעות כזו, הם יכולים לפתוח מעטפת בתוך האתר ולנצל בקלות את המידע בשרת. חשוב מאוד לשלוט בכל הקבצים שהועלו על ידי משתמשים, להחיל שיטות רשימת היתרים ולהסתיר את מיקום הספרייה שהועלתה במידת האפשר.
וכמובן, יש עוד הרבה צעדים נוספים שעליך לנקוט כדי להגן על האתר שלך, גם אם אתה נוקט בכל אמצעי הזהירות המומלצים להעלאת מודולי קבצים. שימוש בכותרות אבטחה של HTTP הוא צעד כזה שאתה יכול לעשות.