Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Firebase güvenlik kontrol listesi

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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

Hizmet reddi (DOS) saldırıları gibi kötüye kullanım amaçlı trafiği algılamak için Cloud Firestore , Realtime Database , Cloud Storage ve Hosting için izleme ve uyarı ayarlayın

Başvurunuza yönelik bir saldırıdan şüpheleniyorsanız, neler olduğunu bildirmek için mümkün olan en kısa sürede Destek ile iletişime geçin.

Uygulama Kontrolünü Etkinleştir

Arka uç hizmetlerinize yalnızca uygulamalarınızın erişebildiğinden emin olmak için, onu destekleyen her hizmet için Uygulama Kontrolü'nü etkinleştirin.

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, uygulamanız için normal trafiğe dayalı olarak bir işlevin eşzamanlı örneklerinin sayısını sınırlayabilirsiniz .

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. Kullanım ve faturalandırma panonuzu izlediğinizden emin olun, ancak kaynak kullanımı beklentileri aştığında bilgilendirilmek için projenizde bütçe uyarıları da ayarlayabilirsiniz .

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. Geliştirmenizi Firebase emulator suite ile yaparak bu hataların canlı servisleri etkilemesini önleyebilirsiniz.

(Ve yanlışlıkla DOS'u kendiniz yaparsanız, işlevinizi index.js kaldırarak ve ardından firebase deploy --only functions çalıştırarak 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ız gerekmiyorsa sonuçları toplu olarak işleyerek kötüye kullanım trafiğini 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ı anlama

Firebase hizmetleri için 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 yapılan veritabanına veya Bulut Depolama verilerine erişimi kontrol etmek için kullanmaz. Bu nedenle, Firebase hizmetleri için API anahtarlarını gizli dizi olarak değerlendirmeniz gerekmez ve bunları istemci koduna güvenle gömebilirsiniz. Firebase için API anahtarları hakkında daha fazla bilgi edinin.

API anahtarı kapsamını ayarlayın

İstekleri yanıltmak için API anahtarınızı kullanmaya çalışan bir saldırgana karşı ek bir caydırıcı olarak, uygulama istemcilerinize yönelik API anahtarları oluşturabilirsiniz.

FCM sunucu anahtarlarını gizli tutun

Firebase hizmetleri için API anahtarlarının aksine, FCM sunucu anahtarları ( eski FCM HTTP API'si tarafından kullanılır ) hassastır ve gizli tutulmalıdır.

Hizmet hesabı anahtarlarını gizli tutun

Ayrıca, Firebase hizmetleri için API anahtarlarının aksine, hizmet hesabı özel anahtarları ( Yönetici SDK'sı tarafından kullanılır ) hassastı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, varsayılan olarak tüm erişimi reddetmek için güvenlik kurallarınızı başlatı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

Güvenlik kurallarınızın uygulamanızın geliştirilmesine ayak uydurduğundan emin olmak için kurallarınızı Firebase öykünücü paketiyle test edin 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 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. 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 sağlayıcı ile özel kimlik doğrulama kullanma ö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. 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

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ın. Bunu , Google Cloud Console'daki API sayfasından yapabilirsiniz.

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

Oturum açarken ekstra güvenlik için Cloud Identity Platform'a yükselterek ç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

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 cihazda uygulamanın yeniden başlatılmasının ötesinde 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 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, 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 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, önceden tanımlanmış roller veya özel IAM rolleri kullanarak üretim verilerine erişimi sınırlayarak hataların ve ihlallerin sonuçlarını azaltabilirsiniz.

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

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 et

Bulut İşlevleri kaydedici SDK'sını kullanırsanı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

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. Bunu Cloud Functions'ta yapmayın . Cloud Functions, işlev çağrıları arasında ortamları yeniden kullandığından, hassas bilgiler ortamda depolanmamalıdır.

  • Secret olmayan Firebase API anahtarlarını saklamak için bunları koda yerleştirmeniz yeterlidir.
  • 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.
  • Hizmet hesabı kimlik bilgileri gerektiren Google ve Google Cloud API'lerini arı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ışı hizmetlerin özel anahtarlarını ve kimlik bilgilerini Cloud Functions'ınızda kullanılabilir hale getirmek için Cloud Secret Manager'ı kullanın.

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.

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