הסבר על כללי אבטחה של 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. כך תוכלו לשלוט באופן מאובטח בגישה לנתונים לפי משתמש. מידע נוסף מופיע בקטע Authentication.

הרשאה

זיהוי המשתמש הוא רק חלק מאבטחה. אחרי שתדעו מי הם, תצטרכו למצוא דרך לשלוט בגישה שלהם לקבצים ב-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/.*');
    }
  }
}

השלבים הבאים