הבן את כללי האבטחה של Firebase לאחסון בענן

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

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

מאגר Firebase זמן האמת יש תכונה דומה, שנקרא חוקי מסד Firebase זמן אמת

אימות

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

הרשאה

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

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

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

אתה יכול לערוך כללים אלה על ידי בחירת אפליקצית Firebase ב Firebase הקונסולה וצפיית Rules הלשונית של קטע האחסון.

אימות מידע

כללי אבטחת Firebase עבור אחסון ענן יכולים לשמש גם עבור אימות נתונים, לרבות אימות שם קובץ ונתיב וכן נכסי metadata קבצים כגון 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/.*');
    }
  }
}

הצעדים הבאים