הימנע מחוקים לא בטוחים

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

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

גש לכללי האבטחה שלך ב-Firebase

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

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

כדי לגשת לכללים שלך מה-CLI של Firebase, עבור אל קובץ הכללים המצוין בקובץ firebase.json שלך.

הבן את כללי האבטחה של Firebase

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

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

תרחישים נפוצים עם כללים לא בטוחים

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

גישה חופשית

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

לא מומלץ: גישת קריאה וכתיבה לכל המשתמשים.

Cloud Firestore

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

מסד נתונים בזמן אמת

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

  "rules": {
    ".read": true,
    ".write": true
  }
}
    

אחסון בענן

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
פתרון: כללים המגבילים גישת קריאה וכתיבה.

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

Cloud Firestore

מסד נתונים בזמן אמת

אחסון בענן

גישה לכל משתמש מאומת

לפעמים, הכללים בודקים שמשתמש מחובר, אך לא מגבילים יותר את הגישה על סמך האימות הזה. אם אחד מהכללים שלך כולל auth != null , אשר שאתה רוצה שלכל משתמש מחובר תהיה גישה לנתונים.

לא מומלץ: לכל משתמש מחובר יש גישת קריאה וכתיבה לכל מסד הנתונים שלך.

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    match /some_collection/{document} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

מסד נתונים בזמן אמת

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

אחסון בענן

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
פתרון: צמצם גישה באמצעות תנאי אבטחה.

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

Cloud Firestore

מסד נתונים בזמן אמת

אחסון בענן

(מסד נתונים בזמן אמת) כללים שהועברו בצורה לא נכונה

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

לא מומלץ: חידוד כללים בנתיבי צאצא
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
פתרון: כתוב כללים בנתיבי אב שהם רחבים, והענקת הרשאות ספציפיות יותר בנתיבי צאצא אם צרכי הגישה לנתונים שלך דורשים פירוט רב יותר, שמור על הכללים שלך מפורטים. למידע נוסף על שילוב כללי מסד נתונים בזמן אמת ב- Secure Your Data .

גישה סגורה

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

Cloud Firestore

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

מסד נתונים בזמן אמת

{
  "rules": {
    ".read": false,
    ".write": false
  }
}
    

אחסון בענן

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

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

ערכות Firebase Admin ו-Cloud Functions עדיין יכולות לגשת למסד הנתונים שלך. השתמש בכללים אלה כאשר אתה מתכוון להשתמש ב-Cloud Firestore או ב-Realtime Database כקצה עורפי לשרת בלבד בשילוב עם Firebase Admin SDK. בזמן שהוא מאובטח, עליך לבדוק שהלקוחות של האפליקציה שלך יכולים לאחזר נתונים כראוי.

למידע נוסף על כללי האבטחה של Cloud Firestore וכיצד הם פועלים, ראה התחל עם כללי האבטחה של Cloud Firestore .

בדוק את כללי האבטחה של Cloud Firestore שלך

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

כדי לאמת במהירות את כללי האבטחה של Firebase במסוף Firebase, השתמש בסימולטור הכללים של Firebase .