Firebase güvenlik kontrol listesi

Firebase kaynaklarınızı ve kullanıcılarınızın verilerini güvende tutmak için bu yönergeleri izleyin. Her öğe mutlaka gereksinimlerinize uygun olmayabilir ancak uygulamanızı geliştirirken bunları aklınızda bulundurun.

Kötüye kullanım amaçlı trafikten kaçının

Arka uç hizmetleri için izleme ve uyarıları ayarlama

Hizmet reddi (DOS) saldırıları gibi kötü amaçlı trafiği tespit etmek için Cloud Firestore , Gerçek Zamanlı Veritabanı , Bulut Depolama ve Barındırma için izleme ve uyarı ayarlarını yapın

Uygulamanıza bir saldırı yapıldığından şüpheleniyorsanız mümkün olan en kısa sürede Destek ekibiyle iletişime geçerek neler olduğunu bildirin.

Uygulama Kontrolünü Etkinleştir

Yalnızca uygulamalarınızın arka uç hizmetlerinize erişebilmesini sağlamak amacıyla, onu destekleyen her hizmet için Uygulama Kontrolü'nü etkinleştirin.

Bulut İşlevlerinizi normal trafiğe göre ölçeklenecek şekilde yapılandırın

Cloud Functions, uygulamanızın taleplerini karşılayacak şekilde otomatik olarak ölçeklenir ancak bir saldırı durumunda bu büyük bir fatura anlamına gelebilir. Bunu önlemek için, uygulamanızın normal trafiğini temel alarak bir işlevin eşzamanlı örneklerinin sayısını sınırlayabilirsiniz .

Sınırlara neredeyse ulaşıldığında bilgilendirilecek uyarıyı ayarlayın

Hizmetinizde isteklerde ani artışlar varsa, genellikle kotalar devreye girer ve uygulamanıza gelen trafiği otomatik olarak azaltır. Kullanım ve faturalandırma kontrol panelinizi izlediğinizden emin olun, ancak kaynak kullanımı beklentileri aştığında bilgilendirilmek üzere projenizde bütçe uyarıları da ayarlayabilirsiniz .

Kendi kendine DO'ları önleyin: emülatörlerle işlevleri yerel olarak test edin

Bulut İşlevlerini geliştirirken yanlışlıkla DOS'u kendiniz yüklemek kolay olabilir: örneğin, sonsuz bir tetikleyici-yazma döngüsü oluşturarak. Firebase emulator suite ile geliştirmelerinizi yaparak bu hataların canlı servisleri etkilemesinin önüne geçebilirsiniz.

(Ve yanlışlıkla DOS'u kendiniz yaparsanız, index.js kaldırarak ve ardından firebase deploy --only functions çalıştırarak işlevinizin dağıtımını geri alın.)

Gerçek zamanlı yanıt vermenin daha az önemli olduğu durumlarda yapı savunmacı bir şekilde çalışır

Bir işlevin sonucunu gerçek zamanlı olarak sunmanıza gerek yoksa, sonuçları toplu olarak işleyerek kötüye kullanım amaçlı trafiği azaltabilirsiniz: sonuçları bir Pub/Sub konusuna yayınlayın ve sonuçları planlanmış bir işlevle düzenli aralıklarla işleyin. .

API anahtarlarını anlayın

Firebase hizmetlerine ilişkin API anahtarları gizli değildir

Firebase, API anahtarlarını yalnızca uygulamanızın Firebase projesini Firebase hizmetlerine tanımlamak için kullanır ve Firebase Güvenlik Kuralları kullanılarak gerçekleştirilen veritabanına veya Bulut Depolama verilerine erişimi kontrol etmek için kullanmaz. Bu nedenle Firebase hizmetlerine ilişkin API anahtarlarını sır olarak değerlendirmenize gerek yoktur ve bunları güvenli bir şekilde istemci koduna gömebilirsiniz. Firebase için API anahtarları hakkında daha fazla bilgi edinin.

API anahtarı kapsamını ayarlama

İstekleri yanıltmak amacıyla API anahtarınızı kullanmaya çalışan bir saldırgana karşı ek bir caydırıcı olarak, kapsamı uygulama istemcilerinize göre ayarlanmış API anahtarları oluşturabilirsiniz.

FCM sunucu anahtarlarını gizli tutun

Firebase hizmetlerine yönelik API anahtarlarının aksine, FCM sunucu anahtarları ( eski FCM HTTP API'si tarafından kullanılır) hassastır ve gizli tutulması gerekir.

Hizmet hesabı anahtarlarını gizli tutun

Ayrıca Firebase hizmetlerine yönelik API anahtarlarının aksine, hizmet hesabı özel anahtarları ( Yönetici SDK'sı tarafından kullanılır) hassastır ve gizli tutulması gerekir.

Güvenlik kuralları

Kuralları üretim modunda veya kilitli modda başlatın

Cloud Firestore, Realtime Database ve Cloud Storage'ı kurduğunuzda varsayılan olarak tüm erişimi reddedecek şekilde güvenlik kurallarınızı başlatın ve uygulamanızı geliştirirken belirli kaynaklara erişim izni veren kurallar ekleyin.

Bu, Cloud Firestore (üretim modu) ve Realtime Database'in (kilitli mod) yeni örnekleri için varsayılan ayarlardan biridir. Yeni bir veritabanı örneği ayarlarken bu seçeneği seçin.

Cloud Storage için aşağıdaki gibi bir güvenlik kuralları yapılandırmasıyla başlayın:

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

Güvenlik kuralları bir şemadır; belge eklediğinizde kurallar ekleyin

Bir tür lansman öncesi görev olarak, uygulamanızı yazdıktan sonra güvenlik kuralları yazmayın. Bunun yerine, uygulamanızı yazarken güvenlik kurallarını yazın ve bunlara bir veritabanı şeması gibi davranın: yeni bir belge türü veya yol yapısı kullanmanız gerektiğinde, önce onun güvenlik kuralını yazın.

Emulator Suite ile güvenlik kurallarını birim testi; CI'ya ekle

Güvenlik kurallarınızın uygulamanızın gelişimine ayak uydurduğundan emin olmak için kurallarınızı Firebase emülatör paketiyle birim testi yapın ve bu testleri CI ardışık düzeninize ekleyin. Cloud Firestore ve Realtime Database için bu kılavuzlara bakın.

Kimlik doğrulama

Özel kimlik doğrulama: JWT'leri güvenilir (sunucu tarafı) bir ortamdan nane

Halihazırda güvenli bir oturum açma sisteminiz varsa (özel bir sistem veya üçüncü taraf bir hizmet), Firebase hizmetleriyle kimlik doğrulamak için mevcut sisteminizi kullanabilirsiniz. Güvenilir bir ortamdan özel JWT'ler oluşturun , ardından belirteçleri, kimlik doğrulaması için belirteci kullanan istemcinize iletin ( iOS+ , Android , Web , Unity , C++ ).

Üçüncü taraf bir sağlayıcıyla özel kimlik doğrulama kullanmanın bir örneği için Okta kullanarak Firebase ile kimlik doğrulama blog gönderisine bakın.

Yönetilen kimlik doğrulama: OAuth 2.0 sağlayıcıları en güvenli olanlardır

Firebase'in yönetilen kimlik doğrulama özelliklerini kullanıyorsanız OAuth 2.0 / OpenID Connect sağlayıcı seçenekleri (Google, Facebook vb.) en güvenli olanlardır. Yapabiliyorsanız bu sağlayıcılardan bir veya daha fazlasını desteklemelisiniz (kullanıcı tabanınıza bağlı olarak).

E-posta parolası kimlik doğrulaması: Kaba kuvvet saldırılarını önlemek amacıyla oturum açma uç noktası için sıkı bir kota ayarlayın

Firebase'in yönetilen e-posta-şifre kimlik doğrulama hizmetini kullanıyorsanız kaba kuvvet saldırılarını önlemek için identitytoolkit.googleapis.com uç noktalarının varsayılan kotasını sıkılaştırın. Bunu Google Cloud konsolundaki API sayfasından yapabilirsiniz.

E-posta parolası kimlik doğrulaması: E-posta numaralandırma korumasını etkinleştirin

Firebase'in yönetilen e-posta-şifre kimlik doğrulama hizmetini kullanıyorsanız, kötü niyetli kişilerin hesap adlarını tahmin etmek için projenizin kimlik doğrulama uç noktalarını kötüye kullanmasını önleyen e-posta numaralandırma korumasını etkinleştirin .

Çok faktörlü kimlik doğrulama için Cloud Identity Platform'a yükseltin

Oturum açma sırasında ekstra güvenlik sağlamak için Cloud Identity Platform'a yükseltme yaparak çok faktörlü kimlik doğrulama desteği ekleyebilirsiniz. Mevcut Firebase Kimlik Doğrulama kodunuz, yükseltme işleminden sonra çalışmaya devam edecektir.

Anonim kimlik doğrulama

İlk katılım için yalnızca anonim kimlik doğrulamayı kullanın

Kullanıcılar gerçekten oturum açmadan önce temel durumları kaydetmek için yalnızca anonim kimlik doğrulamayı kullanın. Anonim kimlik doğrulama, kullanıcı oturum açma işleminin yerine geçmez.

Telefonlarını kaybettiklerinde verileri isteyecekleri takdirde kullanıcıları başka bir oturum açma yöntemine dönüştürün

Kullanıcı yerel depolamayı temizlerse veya cihazları değiştirirse anonim kimlik doğrulama verileri kalıcı olmaz. Tek bir cihazda uygulama yeniden başlatıldıktan sonra verileri sürdürmeniz gerekiyorsa kullanıcıyı kalıcı bir hesaba dönüştürün .

Kullanıcıların bir oturum açma sağlayıcısına geçiş yapmasını veya e-postalarını doğrulamasını gerektiren güvenlik kurallarını kullanın

Herkes projenizde anonim bir hesap oluşturabilir. Bunu göz önünde bulundurarak, herkese açık olmayan tüm verileri , belirli oturum açma yöntemleri veya doğrulanmış e-posta adresleri gerektiren güvenlik kurallarıyla koruyun.

Örneğin:

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

Çevre yönetimi

Geliştirme ve aşamalandırma projeleri oluşturma

Geliştirme, hazırlama ve prodüksiyon için ayrı Firebase projeleri oluşturun. Hazırlama projesine göre test edilene kadar istemci kodunu üretimle birleştirmeyin.

Ekibin üretim verilerine erişimini sınırlayın

Daha büyük bir ekiple çalışıyorsanız, önceden tanımlanmış rolleri veya özel IAM rollerini kullanarak üretim verilerine erişimi sınırlayarak hataların ve ihlallerin sonuçlarını azaltabilirsiniz.

Ekibiniz geliştirme için emülatör paketini kullanıyorsa üretim projesine daha geniş erişim izni vermeniz gerekmeyebilir.

Kütüphane yönetimi

Kitaplık yazım hatalarına veya yeni bakımcılara dikkat edin

Projenize kütüphaneler eklerken kütüphanenin ismine ve bakımcılarına çok dikkat edin. Yüklemeyi düşündüğünüz kitaplığa benzer ada sahip bir kitaplık, kötü amaçlı kod içerebilir.

Değişiklikleri anlamadan kitaplıkları güncellemeyin

Yükseltmeden önce kullandığınız kitaplıkların değişiklik günlüklerine bakın. Yükseltmenin değer kattığından emin olun ve bakımcının hâlâ güvendiğiniz bir taraf olup olmadığını kontrol edin.

Watchdog kitaplıklarını geliştirme veya test bağımlılıkları olarak yükleyin

Projenizi güvenli olmayan bağımlılıklara karşı taramak için Snyk gibi bir kitaplık kullanın.

İşlevler için izlemeyi ayarlayın; kütüphane güncellemelerinden sonra kontrol edin

Cloud Functions günlükçü SDK'sını kullanıyorsanız kitaplık güncellemelerinin neden olduğu davranışlar da dahil olmak üzere olağandışı davranışları izleyebilir ve bunlara karşı uyarı alabilirsiniz .

Bulut İşlevi güvenliği

Hiçbir zaman hassas bilgileri Bulut İşlevinin ortam değişkenlerine koymayın

Genellikle şirket içinde barındırılan bir Node.js uygulamasında, özel anahtarlar gibi hassas bilgileri içermek için ortam değişkenlerini kullanırsınız. Bunu Cloud Functions'ta yapmayın . Cloud Functions, işlev çağrıları arasında ortamları yeniden kullandığından, hassas bilgilerin ortamda saklanmaması gerekir.

  • Gizli olmayan Firebase API anahtarlarını saklamak için bunları kodun içine yerleştirmeniz yeterlidir.
  • Firebase Yönetici SDK'sını bir Bulut İşlevinde kullanıyorsanız hizmet hesabı kimlik bilgilerini açıkça sağlamanıza gerek yoktur çünkü SDK, başlatma sırasında bunları otomatik olarak alabilir.
  • Hizmet hesabı kimlik bilgileri gerektiren Google ve Google Cloud API'lerini çağırıyorsanız Node.js için Google Auth kitaplığı, bu kimlik bilgilerini Cloud Functions'ta otomatik olarak doldurulan uygulama varsayılan kimlik bilgilerinden alabilir.
  • Google dışı hizmetlere ilişkin özel anahtarların ve kimlik bilgilerinin Bulut İşlevlerinizin kullanımına sunulması için Cloud Secret Manager'ı kullanın.

Hassas bilgileri şifreleyin

Hassas bilgilerin Bulut İşlevinize iletilmesini önleyemiyorsanız bilgileri şifrelemek için kendi özel çözümünüzü bulmanız gerekir.

Basit işlevler daha güvenlidir; Karmaşıklığa ihtiyacınız varsa Cloud Run'ı düşünün

Bulut İşlevlerinizi mümkün olduğunca basit ve anlaşılır tutmaya çalışın. İşlevlerinizdeki karmaşıklık çoğu zaman tespit edilmesi zor hatalara veya beklenmeyen davranışlara yol açabilir.

Karmaşık mantık veya ortam yapılandırmalarına ihtiyacınız varsa Cloud Functions yerine Cloud Run'ı kullanmayı düşünün.