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

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

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

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

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

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

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

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

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

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

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

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

גישה חופשית

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

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

ענן 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. למידע נוסף על אימות משתמשים עם כללים .

ענן Firestore

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

אחסון בענן

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

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

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

ענן 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;
    }
  }
}
פתרון: גישה צרה באמצעות תנאי ביטחון.

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

ענן Firestore

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

אחסון בענן

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

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

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

גישה סגורה

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

ענן 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;
    }
  }
}

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

למידע נוסף על ענן Firestore אבטחת הכללים איך הם עובדים להתחיל עם ענן Firestore כללי אבטחה .

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

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

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