הבן כללי מסד נתונים בזמן אמת של Firebase

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

לכללי האבטחה של מסדי נתונים בזמן אמת יש תחביר דמוי JavaScript והם מגיעים בארבעה סוגים:

סוגי הכללים
.לקרוא מתאר אם ומתי משתמשים יכולים לקרוא נתונים.
.לִכתוֹב מתאר אם ומתי מותר לכתוב נתונים.
.לְאַמֵת מגדיר כיצד ייראה ערך מעוצב כהלכה, האם יש לו מאפייני ילד וסוג הנתונים.
.indexOn מציין ילד לאינדקס לתמיכה בהזמנה ובשאילתות.

סקירת אבטחה של מסד נתונים בזמן אמת

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

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

אימות

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

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

הרשאה

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

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

.read ו .write כללי מפל, כך מענקי מערכת כללים זו לקרוא גישה לכול נתון ב נתיב /foo/ וכן כול שבילים עמוקים כמו /foo/bar/baz . הערה כי .read ו .write כללים רדודים בתוך לעקוף נתון כללים עמוקים, כך גישת קריאה /foo/bar/baz היה עדיין יוענק בדוגמא זו אפילו אם כלל בנתיב /foo/bar/baz העריך עד השקר.

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

{
  "rules": {
    "users": {
      "$uid": {
        ".write": "$uid === auth.uid"
      }
    }
  }
}

אימות מידע

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

הכלל אלה לאכוף כי הנתונים הנכתבים /foo/ חייב להיות מחרוזת פחות מ 100 תווים:

{
  "rules": {
    "foo": {
      ".validate": "newData.isString() && newData.val().length < 100"
    }
  }
}

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

הגדרת אינדקסי מסדי נתונים

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

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

{
  "rules": {
    "dinosaurs": {
      ".indexOn": ["height", "length"]
    }
  }
}

הצעדים הבאים