דף זה תורגם על ידי Cloud Translation API.
Switch to English

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

הצעדים הבאים