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

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

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

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

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

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

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

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

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

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

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

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

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

זה יכול להיות קל לטעות DOS בעצמך בעת פיתוח פונקציות ענן: למשל, על ידי יצירת לולאה אינסופית של טריגר וכתיבה. אתה יכול למנוע טעויות אלו המשפיעים שירותי חיה ידי ביצוע הפיתוח שלך עם חבילת אמולטור 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, Database Realtime ו- Cloud Storage, צור אינטימיזציה לכללי האבטחה שלך כדי למנוע כל גישה כברירת מחדל, והוסף כללים שמעניקים גישה למשאבים ספציפיים תוך כדי פיתוח האפליקציה שלך.

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

עבור אחסון בענן, התחל בתצורה של כללי אבטחה כמו הבאה:

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

כללי אבטחה הם סכמה; הוסף כללים כאשר אתה מוסיף מסמכים

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

כללי אבטחה לבדיקת יחידה באמצעות Suite Emulator; הוסף אותו ל- CI

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

אימות

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

אם כבר יש לך מערכת כניסה מאובטחת, בין אם מדובר במערכת מותאמת אישית ובין אם מדובר בשירות צד שלישי, תוכל להשתמש במערכת הקיימת שלך לאימות עם שירותי Firebase. צור JWTs מנהג מסביבה מהימנה, ולאחר מכן להעביר את האסימונים ללקוח שלך, אשר משתמש אסימון אימות ( iOS , Android , Web , אחדות , 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 לפיתוח, בימוי והפקה. אל תמזג קוד לקוח לייצור עד שהוא נבדק מול פרויקט הבימוי.

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

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

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

ניהול ספריות

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

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

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

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

התקן ספריות כלבי שמירה כ- dev תלוי או תלות בבדיקה

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

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

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

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

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

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

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

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

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

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

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

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