רשימת ביקורת אבטחה של Firebase

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

הימנע מתנועה פוגענית

הגדר ניטור והתראה עבור שירותי backend

כדי לזהות תנועה בעייתית, כגון סירוב מתן השירות (DoS), להגדיר ניטור והתראות עבור הענן Firestore , מסד זמן אמת , אחסון ענן , ו אירוח

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

אפשר בדיקת אפליקציות

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

הגדר את פונקציות הענן שלך כך שיתאימו לתנועה רגילה

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

הגדר התראה כדי לקבל הודעה כאשר הגבולות כמעט מגיעים

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

מנע מנות עצמיות: בדוק פונקציות באופן מקומי עם האמולטורים

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

(ואם אתה עושה בטעות DOS עצמך, undeploy הפונקציה שלך על ידי הסרתו מן index.js אז רץ firebase deploy --only functions .)

היכן שההיענות בזמן אמת פחות חשובה, המבנה מתפקד בצורה הגנתית

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

הבן מפתחות API

מפתחות API עבור שירותי Firebase אינם סודיים

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

הגדר היקף מפתחות API

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

שמור על מפתחות שרת FCM בסוד

מפתחות API בניגוד לשירותי Firebase, מפתחות בשרת FCM (המשמשים את מורשתו FCM API HTTP ) הם רגישים חייבים להישמר בסוד.

שמור את מפתחות חשבון השירות בסוד

כמו כן מפתחות API בניגוד לשירותי Firebase, שירות חשבון מפתחות פרטיים (המשמשים את SDK של הניהול ) הם רגישים חייבים להישמר בסוד.

כללי אבטחה

אתחול כללים במצב ייצור או נעילה

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

זו אחת מהגדרות ברירת המחדל עבור מופעים חדשים של Cloud Firestore (מצב ייצור) ומסד נתונים בזמן אמת (מצב נעול). בחר באפשרות זו בעת הגדרת מופע מסד נתונים חדש.

עבור Cloud Storage, התחל עם תצורת כללי אבטחה כמו הבאה:

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

כללי אבטחה הם סכמה; הוסף כללים בעת הוספת מסמכים

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

כללי אבטחה לבדיקת יחידות עם חבילת האמולטור; הוסף אותו ל-CI

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

אימות

אימות מותאם אישית: צור JWTs מסביבה מהימנה (בצד השרת).

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

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

אימות מנוהל: ספקי OAuth 2.0 הם המאובטחים ביותר

אם אתה משתמש בתכונות האימות המנוהל של Firebase, אפשרויות הספק OAuth 2.0 / OpenID Connect (גוגל, פייסבוק וכו') הן המאובטחות ביותר. עליך לתמוך באחד או יותר מהספקים הללו אם אתה יכול (בהתאם לבסיס המשתמשים שלך).

אימות סיסמת דוא"ל: הגדר מכסה צמודה לנקודת הקצה של הכניסה כדי למנוע התקפות של כוח גס

אם אתה משתמש מנוהל של Firebase שירות אימות דוא"ל סיסמה, להדק את מכסת ברירת המחדל של identitytoolkit.googleapis.com הקצה כדי למנוע התקפות בכוח הזרוע. אתה יכול לעשות זאת מתוך הדף של API של Google Cloud Console .

שדרג לפלטפורמת Cloud Identity לאימות מרובה גורמים

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

אימות אנונימי

השתמש רק באימות אנונימי לכניסה חמה למטוס

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

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

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

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

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

לדוגמה:

allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;

ניהול סביבה

הקמת פרויקטי פיתוח והקמה

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

הגבל את הגישה של הצוות לנתוני הייצור

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

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

ניהול ספרייה

היזהרו משגיאות כתיב בספרייה או מתחזקים חדשים

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

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

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

התקן ספריות Watchdog כתלות במפתחים או בדיקות

השתמש כגון ספרייה כפי Snyk לסרוק את פרויקט עבור תלות לא מאובטחת.

הגדר ניטור עבור פונקציות; בדוק את זה לאחר עדכוני הספרייה

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

בטיחות פונקציית ענן

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

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

  • כדי לאחסן מפתחות API Firebase, אשר לא סוד , רק להטביע אותם בקוד.
  • אם אתה משתמש ב-Firebase Admin SDK בפונקציה בענן, אינך צריך לספק אישורים מפורשים של חשבון שירות, מכיוון שה-SDK יכול לרכוש אותם באופן אוטומטי במהלך האתחול.
  • אם אתה מתקשר Google ו- Google Cloud APIs הדורשים אישורי חשבון שירות, ספריית מחבר גוגל עבור Node.js יכולה לקבל אישורים אלה מן האישורים המחדלים היישום , אשר מאוכלסים אוטומטית פונקציות ענן.
  • כדי להפוך את מפתחות ואת אישורים פרטיות עבור שירותים שאיננו של Google זמינים לפונקציות קלאוד שלך, להשתמש ענן סוד מנהל .

הצפין מידע רגיש

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

פונקציות פשוטות בטוחות יותר; אם אתה צריך מורכבות, שקול את Cloud Run

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

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