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 gereksinimlerinize uygun olmayabilir, ancak uygulamanızı geliştirirken bunları aklınızda bulundurun.

Kötü niyetli trafikten kaçının

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

Böyle izleme ve için uyarı kurmak reddi servisinin (DOS) saldırıları gibi, kötü niyetli trafik tespit etmek Bulut Firestore , Gerçek Zamanlı Veritabanı , Bulut Depolama ve Barındırma

Başvurunuzda bir saldırı şüpheleniyorsanız, Destek birimine ulaşıp onları ne olup bittiğini bildirmek için en kısa sürede.

Uygulama Kontrolünü Etkinleştir

Yardım için yalnızca uygulamalar, arka uç hizmetlerine erişmek etkinleştirebilirsiniz sağlamak Uygulama Kontrolü destekleri öyle her servis için.

Normal trafik için ölçeklendirmek için Bulut İşlevlerinizi yapılandırın

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

Sınırlara neredeyse ulaşıldığında bilgilendirilmek için uyarı ayarlayın

Hizmetinizde ani istekler varsa, genellikle kotalar devreye girer ve uygulamanıza gelen trafiği otomatik olarak kısar. Senin izlemeyi unutmayın Kullanımı ve fatura dashboard , ama aynı zamanda yapabilirsiniz bütçe uyarıları set kaynak kullanımı beklentilerini aşan zaman bildirilmesini projenizde.

Kendi kendine DOS'ları önleyin: öykünücülerle yerel olarak işlevleri test edin

Cloud Functions'ı geliştirirken yanlışlıkla kendiniz DOS yapmak kolay olabilir: örneğin, sonsuz bir tetikleme-yazma döngüsü oluşturarak. Sen ile geliştirme yaparak canlı hizmetlerini etkilemesini bu hataları önleyebilir Firebase emülatörü paketi .

(Ve onu kaldırarak fonksiyonu undeploy kaza DOS kendiniz yaparsanız index.js sonra çalışan firebase deploy --only functions .)

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

Eğer gerçek zamanlı olarak bir fonksiyonun sonucunu sunmak gerekmez varsa, gruplar halinde sonuçları işleyerek küfürlü trafiğe karşı azaltabilir: Bir sonuçları yayımlamak Pub / Sub konu ve düzenli aralıklarla sonuçlarını işlemek planlanan fonksiyonu .

API anahtarlarını anlama

Firebase hizmetleri için API anahtarları gizli değildir

Firebase kullanımları API anahtarları sadece Firebase hizmetlerine uygulamanızın Firebase projesini tespit değil, veritabanı veya kullanılarak yapılır Bulut Depolama verilerine erişimi kontrol etmek için Firebase Güvenlik Kuralları . Bu nedenle, Firebase hizmetleri için API anahtarlarını gizli dizi olarak değerlendirmeniz gerekmez ve bunları istemci koduna güvenle gömebilirsiniz. Hakkında daha fazla bilgi Firebase için API anahtarları .

API anahtarı kapsamını ayarlayın

Bir saldırgan karşı ek bir caydırıcı parodi isteklerine API anahtarınızı kullanmaya kalkışan olarak, API tuşları oluşturabilirsiniz uygulama müşterilerine kapsamlı .

FCM sunucu anahtarlarını gizli tutun

Firebase hizmetler için farklı API anahtarları, FCM sunucu tuşları (kullandığı mirası FCM HTTP API duyarlıdır) ve gizli tutulmalıdır.

Hizmet hesabı anahtarlarını gizli tutun

Ayrıca farklı API Firebase hizmetleri için anahtarlar, hizmet (kullandığı özel tuşlar hesap Yönetici SDK ) duyarlıdır ve gizli tutulmalıdır.

Güvenlik kuralları

Kuralları üretim veya kilitli modda başlat

Cloud Firestore, Realtime Database ve Cloud Storage'ı kurduğunuzda, tüm erişimi varsayılan olarak reddetmek için güvenlik kurallarınızı sıfırlayın ve uygulamanızı geliştirirken belirli kaynaklara erişim sağlayan 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 kurarken 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 güvenlik kuralını yazın.

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

Emin olmak için güvenlik kuralları uygulamanızın geliştirme, ile kuralları birim test ile tutuyor Firebase emülatörü paketi ve CI boru hattına bu testleri ekleyin. İçin bu kılavuzların bakın Bulut Firestore ve Gerçek Zamanlı Veritabanı .

kimlik doğrulama

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

İster özel bir sistem ister üçüncü taraf bir hizmet olsun, zaten güvenli bir oturum açma sisteminiz varsa, Firebase hizmetleriyle kimlik doğrulamak için mevcut sisteminizi kullanabilirsiniz. Özel JWTS oluşturun sonra authenticate belirteç kullanan müşteri, belirteçleri geçmesi güvenilir bir ortamdan ( iOS , Android , Web , Birlik , C ++ ).

Bir üçüncü taraf sağlayıcı ile özel kimlik doğrulamasını kullanarak bir örnek için, blog yayınına bakınız Firebase Okta kullanarak kimlik doğrulaması yap .

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. Mümkünse (kullanıcı tabanınıza bağlı olarak) bu sağlayıcılardan birini veya birkaçını desteklemelisiniz.

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

Eğer Firebase yönetilen e-posta şifre doğrulaması hizmeti kullanıyorsanız, varsayılan kota sıkın identitytoolkit.googleapis.com kaba kuvvet saldırıları önlemek için uç noktaları. Sen den yapabilirsiniz Google Bulut Konsolu API sayfa .

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

Oturum açmayı ekstra güvenlik için, yükseltme tarafından çok faktörlü kimlik doğrulama desteği ekleyebilir Bulut Kimlik Platformu . Mevcut Firebase Kimlik Doğrulama kodunuz, yükseltme işleminden sonra çalışmaya devam edecektir.

anonim kimlik doğrulama

Sıcak katılım için yalnızca anonim kimlik doğrulama kullanın

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

Telefonlarını kaybettiklerinde verileri isteyeceklerse, 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 cihazdaki uygulama yeniden ötesinde veri devam etmek gerekirse, kalıcı hesabına kullanıcı dönüştürmek .

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

Projenizde herkes anonim bir hesap oluşturabilir. Bunu göz önünde bulundurarak, tüm kamuya açık olmayan verileri korumak yöntemlere özgü oturum açma veya doğrulanmış e-posta adreslerini gerektiren güvenlik kuralları .

Ö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 evreleme projeleri oluşturun

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

Üretim verilerine ekip erişimini sınırlayın

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

Ekibiniz geliştirme için öykünücü paketini kullanıyorsa, üretim projesine daha geniş erişim izni vermeniz gerekmeyebilir.

Kütüphane yönetimi

Kütüphane yazım hatalarına veya yeni bakıcılara dikkat edin

Projenize kitaplıklar eklerken, kitaplığın adına ve bakıcılarına çok dikkat edin. Yüklemeyi düşündüğünüz kitaplığa benzer adlı 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ıcının hala güvendiğiniz bir taraf olup olmadığını kontrol edin.

Watchdog kitaplıklarını geliştirme veya test bağımlılıkları olarak kurun

Gibi bir kütüphane böyle kullanın Snyk güvensiz bağımlılıkları için projenizi taramak için.

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

Eğer kullanırsanız Bulut Fonksiyonlar logger SDK şunları yapabilirsiniz izlemek ve uyarı kütüphane güncellemeleri kaynaklanan davranışları dahil, alışılmadık davranışlar.

Bulut İşlevi güvenliği

Bir Bulut İşlevinin ortam değişkenlerine asla hassas bilgiler koymayın

Genellikle kendi kendine 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. Bulut Fonksiyonlar bunu yapmayın. Cloud Functions, işlev çağrıları arasında ortamları yeniden kullandığından, hassas bilgiler ortamda depolanmamalıdır.

  • Hangi Firebase API anahtarlarını saklamak için sır değil yalnızca kodlarla katıştırdıktan.
  • Firebase Admin SDK'sını bir Bulut İşlevinde kullanıyorsanız, hizmet hesabı kimlik bilgilerini açıkça sağlamanız gerekmez, çünkü SDK bunları başlatma sırasında otomatik olarak alabilir.
  • Eğer hizmet hesabı kimlik gerektiren Google ve Google Cloud API'leri arama yapacaksanız node.js için Google Kimlik Doğrulama kütüphane gelen bu kimlik bilgilerini elde edebilirsiniz uygulama varsayılan kimlik otomatik Bulut Fonksiyonlar doldurulur.
  • Cloud Fonksiyonlar mevcut olmayan Google hizmetleri için özel anahtarlar ve kimlik bilgilerini yapmak için kullanın Bulut Gizli Yöneticisi .

Hassas bilgileri şifreleyin

Hassas bilgileri Bulut İşlevinize iletmekten kaçınamıyorsanız, bilgileri şifrelemek için kendi özel çözümünüzü bulmalısınız.

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, genellikle fark edilmesi zor hatalara veya beklenmeyen davranışlara yol açabilir.

Eğer karmaşık mantık ya çevre yapılandırmaları gerekmiyorsa, kullanmayı düşünün Bulut Çalıştır Bulut İşlevleri yerine.