כללי האבטחה של מסד נתונים בזמן אמת ב-Firebase קובעים למי יש גישת קריאה וכתיבה למסד הנתונים, איך הנתונים בנויים ואילו אינדקסים קיימים. הכללים האלה נמצאים בשרתי Firebase ונאכפים אוטומטית בכל רגע. כל בקשת קריאה וכתיבה תושלם רק אם הכללים שלכם מאפשרים זאת. כברירת מחדל, הכללים לא מאפשרים לאף אחד גישה למסד הנתונים. ההגנה הזו נועדה למנוע ניצול לרעה של מסד הנתונים עד שתהיה לכם אפשרות להתאים אישית את הכללים או להגדיר אימות.
כללי האבטחה של מסד נתונים בזמן אמת הם בעלי תחביר שדומה ל-JavaScript, ויש ארבעה סוגים של כללים:
| סוגי כללים | |
|---|---|
| .read | ההגדרה מתארת אם ומתי מותר למשתמשים לקרוא את הנתונים. |
| .write | תיאור של האפשרות לכתוב נתונים, ומתי. |
| .validate | הוא מגדיר איך ייראה ערך בפורמט תקין, אם יש לו מאפייני משנה ומה סוג הנתונים שלו. |
| .indexOn | מציין צאצא לאינדקס כדי לתמוך בסידור ובשאילתות. |
Realtime Database סקירה כללית על אבטחה
Firebase Realtime Database מספקת קבוצה מלאה של כלים לניהול האבטחה של האפליקציה. הכלים האלה מאפשרים לאמת את המשתמשים, לאכוף את הרשאות המשתמשים ולאמת את הקלט.
באפליקציות שמבוססות על Firebase מופעל יותר קוד בצד הלקוח מאשר באפליקציות עם הרבה סוגים אחרים של חבילות טכנולוגיות. לכן, הגישה שלנו לאבטחה עשויה להיות שונה קצת ממה שאתם רגילים.
אימות
שלב ראשון נפוץ באבטחת האפליקציה הוא זיהוי המשתמשים. התהליך הזה נקרא אימות. אתם יכולים להשתמש באימות ב-Firebase כדי לאפשר למשתמשים להיכנס לאפליקציה שלכם. אימות ב-Firebase כולל תמיכה מוכנה לשימוש בשיטות אימות נפוצות כמו Google ו-פייסבוק, וגם כניסה באמצעות אימייל וסיסמה, כניסה אנונימית ועוד.
זהות המשתמש היא מושג חשוב באבטחה. למשתמשים שונים יש נתונים שונים, ולפעמים יש להם יכולות שונות. לדוגמה, באפליקציית צ'אט, כל הודעה משויכת למשתמש שיצר אותה. יכול להיות שמשתמשים יוכלו למחוק את ההודעות שלהם, אבל לא הודעות שפורסמו על ידי משתמשים אחרים.
הרשאה
זיהוי המשתמש הוא רק חלק מהאבטחה. אחרי שמזהים את המשתמשים, צריך דרך לשלוט בגישה שלהם לנתונים במסד הנתונים. כללי האבטחה של מסד נתונים בזמן אמת מאפשרים לכם לשלוט בגישה של כל משתמש. לדוגמה, הנה קבוצה של כללי אבטחה שמאפשרת לכל אחד לקרוא את הנתיב /foo/, אבל לא מאפשרת לאף אחד לכתוב בו:
{
"rules": {
"foo": {
".read": true,
".write": false
}
}
}הכללים של .read ושל .write הם כללים מדורגים, ולכן קבוצת הכללים הזו מעניקה גישת קריאה לכל הנתונים בנתיב /foo/, וגם לכל הנתיבים העמוקים יותר, כמו /foo/bar/baz. חשוב לזכור שכללים ברמה גבוהה יותר במסד הנתונים .read ו-.write מבטלים כללים ברמה נמוכה יותר, ולכן במקרה הזה עדיין תינתן גישת קריאה ל-/foo/bar/baz גם אם כלל בנתיב /foo/bar/baz יחזיר את הערך false.
כללי האבטחה של מסד נתונים בזמן אמת כוללים
משתנים מובנים
ופונקציות שמאפשרים לכם להפנות לנתיבים אחרים, לחותמות זמן בצד השרת, לפרטי אימות ועוד. דוגמה לכלל שמעניק למשתמשים מאומתים הרשאת כתיבה ל-/users/<uid>/, כאשר <uid> הוא המזהה של המשתמש שהתקבל דרך Firebase Authentication.
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}אימות נתונים
ה-Firebase Realtime Database הוא ללא סכימה. כך קל לשנות דברים במהלך הפיתוח, אבל אחרי שהאפליקציה מוכנה להפצה, חשוב שהנתונים יישארו עקביים. שפת הכללים כוללת כלל .validate
שמאפשר להחיל לוגיקת אימות באמצעות אותם ביטויים שמשמשים לכללי .read ו-.write. ההבדל היחיד הוא שכללי אימות לא מועברים הלאה, ולכן כל כללי האימות הרלוונטיים צריכים להחזיר את הערך True כדי שהכתיבה תתאפשר.
הכללים האלה מבטיחים שהנתונים שנכתבים ל-/foo/ יהיו מחרוזת באורך של פחות מ-100 תווים:
{
"rules": {
"foo": {
".validate": "newData.isString() && newData.val().length < 100"
}
}
}לכללי אימות יש גישה לכל הפונקציות והמשתנים המובנים שזמינים לכללי .read ו.write. אפשר להשתמש בהם כדי ליצור כללי אימות שמודעים לנתונים במקומות אחרים במסד הנתונים, לזהות המשתמש, לזמן השרת ועוד.
הגדרת אינדקסים של מסד נתונים
האפשרות Firebase Realtime Database מאפשרת להזמין נתונים ולהריץ עליהם שאילתות. במסד הנתונים אפשר להריץ שאילתות אד-הוק על נתונים קטנים, ולכן בדרך כלל לא צריך אינדקסים במהלך הפיתוח. לפני שמשיקים את האפליקציה, חשוב לציין אינדקסים לכל השאילתות כדי לוודא שהן ימשיכו לפעול ככל שהאפליקציה תגדל.
האינדקסים מצוינים באמצעות הכלל .indexOn. דוגמה להצהרת אינדקס שתבצע אינדקס של השדות height ו-length עבור רשימה של דינוזאורים:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}השלבים הבאים
- מתחילים לפתח כללי תכנון למסד הנתונים.
- מידע נוסף על אבטחת הנתונים באמצעות כללי אבטחה
- מידע נוסף על ציון אינדקסים באמצעות כללים