Catch up on everything we announced at this year's Firebase Summit. Learn more

הבן כללי מסד נתונים בזמן אמת של 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"]
    }
  }
}

הצעדים הבאים