הסבר על כללי אבטחה של Firebase ל-Cloud Storage

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

בדומה לאופן שבו Firebase Authentication מאפשר לאמת בקלות את המשתמשים, Firebase Security Rules ב-Cloud Storage מאפשר להעניק הרשאות למשתמשים ולאמת בקשות בקלות. Cloud Storage Security Rules מאפשר לציין הרשאות מבוססות נתיב כדי לנהל את המורכבות. בכמה שורות קוד בלבד, אפשר לכתוב כללי הרשאה שמגבילים את הבקשות ל-Cloud Storage למשתמש מסוים או מגבילים את גודל ההעלאה.

ב-Firebase Realtime Database יש תכונה דומה שנקראת Firebase Realtime Database Security Rules

אימות

חשוב לדעת מי המשתמשים שלכם כשאתם מפתחים אפליקציה, ו-Firebase Authentication מספק פתרון מאובטח וקל לשימוש לאימות בצד הלקוח בלבד. Firebase Security Rules ל-Cloud Storage מקושר ל-Firebase Authentication מטעמי אבטחה מבוססת-משתמשים. כשמשתמש מאומת באמצעות Firebase Authentication, המשתנה request.auth ב-Cloud Storage Security Rules הופך לאובייקט שמכיל את המזהה הייחודי של המשתמש (request.auth.uid) ואת כל שאר פרטי המשתמש באסימון (request.auth.token). כשהמשתמש לא מאומת, הערך של request.auth הוא null. כך תוכלו לשלוט באופן מאובטח בגישה לנתונים לפי משתמש. מידע נוסף זמין בקטע אימות.

הרשאה

זיהוי המשתמש הוא רק חלק מאבטחה. אחרי שתכירו אותם, צריכה להיות לכם דרך לשלוט בגישה שלהם לקבצים ב-Cloud Storage.

Cloud Storage מאפשר לכם לציין כללי הרשאה לכל קובץ ולנתיב שנמצאים בשרתים שלנו וקובעים את הגישה לקבצים באפליקציה. לדוגמה, ברירת המחדל של Cloud Storage Security Rules דורשת Firebase Authentication כדי לבצע פעולות read או write בכל הקבצים:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

כדי לערוך את הכללים האלה, בוחרים אפליקציית Firebase במסוף Firebase ומעיינים בכרטיסייה Rules בקטע Storage (אחסון).

אימות נתונים

אפשר להשתמש ב-Firebase Security Rules ל-Cloud Storage גם לאימות נתונים, כולל אימות של שם הקובץ והנתיב, וגם מאפיינים של מטא-נתונים של קבצים כמו contentType ו-size.

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

השלבים הבאים