Firebase kaynaklarınızı ve kullanıcılarınızın verilerini güvende tutmak için bu yönergeleri uygulayın. Her öğe gereksinimlerinize uygun olmayabilir ancak uygulamanızı geliştirirken bunları göz önünde bulundurun.
Kötüye kullanım amaçlı trafikten kaçınma
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 tespit etmek için Cloud Firestore, Realtime Database, Cloud Storage ve Hosting için izleme ve uyarı oluşturun.
Uygulamanıza saldırı olduğundan şüpheleniyorsanız neler olduğunu bildirmek için en kısa sürede destek ekibine ulaşın.
Etkinleştir App Check
Yalnızca uygulamalarınızın arka uç hizmetlerinize erişebilmesini sağlamak için bunu destekleyen her hizmette Firebase App Check seçeneğini etkinleştirin.
Normal trafik için Cloud Functions'nizi ölçeklendirecek şekilde yapılandırın
Cloud Functions Uygulamanızın taleplerini karşılamak için otomatik olarak ölçeklendirme yapar ancak saldırı durumunda bu, büyük bir fatura anlamına gelebilir. Bunu önlemek için uygulamanızdaki normal trafiğe göre bir işlevin eşzamanlı örneklerinin sayısını sınırlayabilirsiniz.
Sınırlara yaklaşıldığında bildirim almak için uyarıları ayarlama
Hizmetinizde istek artışları varsa genellikle kotalar devreye girer ve uygulamanıza yönelik trafik otomatik olarak sınırlandırılır.
Kullanım ve faturalandırma kontrol panelinizi düzenli olarak kontrol edin.
Kaynak kullanımı beklentileri aştığında bildirim almak için projenizle ilgili bütçe uyarıları ayarlayın.
Firebase AI Logic, Firebase App Hosting, Cloud Functions for Firebase ve Firebase Extensions kullanıyorsanız projeniz ilgili hizmet için belirlenen bütçeye ulaştığında geçerli hizmeti duraklatmak üzere harcama sınırları belirleyin.
Kendini hizmet reddi saldırılarından koruma: İşlevleri emülatörlerle yerel olarak test etme
Geliştirme sırasında Cloud Functions, örneğin sonsuz bir tetikleyici yazma döngüsü oluşturarak kendinize yanlışlıkla hizmet reddi saldırısı yapabilirsiniz. Geliştirme işlemlerinizi Firebase Local Emulator Suite ile yaparak bu hataların canlı hizmetleri etkilemesini önleyebilirsiniz.
Kendinize yanlışlıkla DOS saldırısı yaparsanız işlevinizi index.js adresinden silerek dağıtımı kaldırın ve ardından firebase deploy --only functions
Anında yanıt verme özelliğinin daha az önemli olduğu yerlerde işlevleri savunma amaçlı olarak yapılandırın
Bir işlevin sonucunu anlık olarak sunmanız gerekmiyorsa 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ı anlama
Firebase hizmetleri için API anahtarları gizli değildir
Firebase hizmetleri için API anahtarları yalnızca Firebase projenizi ve uygulamanızı bu hizmetlere tanımlamak için kullanılır. Yetkilendirme, Google Cloud IAM izinleri, Firebase Security Rules ve Firebase App Check aracılığıyla yapılır.
Firebase'de sağlanan tüm API anahtarları, otomatik olarak Firebase ile ilgili API'ler ile sınırlandırılır. Uygulamanızın kurulumu bu sayfadaki yönergelere uygunsa Firebase hizmetleriyle sınırlı API anahtarlarının sır olarak değerlendirilmesi gerekmez ve bu anahtarları kodunuza veya yapılandırma dosyalarınıza eklemek güvenlidir.
API anahtarı kısıtlamalarını ayarlama
Diğer Google hizmetleri için API anahtarları kullanıyorsanız API anahtarlarınızı uygulama istemcileriniz ve kullandığınız API'lerle sınırlamak için API anahtarı kısıtlamaları uyguladığınızdan emin olun.
Firebase'de sağlanan API anahtarlarınızı yalnızca Firebase ile ilgili API'ler için kullanın. Uygulamanız başka API'ler (örneğin, Haritalar için Places API veya Gemini Developer API) kullanıyorsa ayrı bir API anahtarı kullanın ve bunu geçerli API ile kısıtlayın.
FCM sunucu anahtarlarını gizli tutun
Firebase hizmetleri için kullanılan 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
Firebase hizmetleri için kullanılan API anahtarlarının aksine, hizmet hesabı özel anahtarları (Firebase Admin SDK tarafından kullanılır) hassastır ve gizli tutulmalıdır.
Firebase Security Rules
Kuralları üretim veya kilitli modda başlatma
Cloud Firestore, Realtime Database ve Cloud Storage'ı ayarlarken Firebase Security Rules'ınızı varsayılan olarak tüm erişimi reddedecek şekilde başlatın ve uygulamanızı geliştirirken belirli kaynaklara erişim izni veren kurallar ekleyin.
Cloud Firestore (üretim modu) ve Realtime Database (kilitli mod) öğelerinin yeni örnekleri için varsayılan ayarlardan birini kullanın. 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. Doküman eklerken kural da ekleyin.
Uygulamanızı yazdıktan sonra, lansman öncesi bir görev olarak güvenlik kuralları yazmayın. Bunun yerine, güvenlik kurallarını uygulamanızı yazarken yazın ve bunları bir veritabanı şeması gibi ele alın: Yeni bir doküman türü veya yol yapısı kullanmanız gerektiğinde önce güvenlik kuralını yazın.
Local Emulator Suite ile güvenlik kurallarını birim testi yapın ve CI'ya ekleyin
Güvenlik kurallarınızın uygulamanızın geliştirme sürecine ayak uydurduğundan emin olmak için kurallarınızı Firebase Local Emulator Suite ile birim test edin ve bu testleri CI işlem hattınıza ekleyin. Cloud Firestore ve Realtime Database ile ilgili bu kılavuzlara göz atın.
Doğrulama
Özel kimlik doğrulama: Güvenilir bir (sunucu tarafı) ortamdan JWT oluşturma
İster özel bir sistem ister üçüncü taraf hizmeti olsun, güvenli bir oturum açma sisteminiz varsa Firebase hizmetlerinde kimlik doğrulamak için mevcut sisteminizi kullanabilirsiniz. Güvenilir bir ortamda özel JWT'ler oluşturun, ardından jetonları istemcinize iletin. İstemciniz, kimlik doğrulamak için jetonu kullanır (iOS+, Android, Web, Unity, C++).
Üçüncü taraf sağlayıcıyla özel kimlik doğrulama kullanma örneği için Authenticate with Firebase using Okta (Okta'yı kullanarak Firebase ile kimlik doğrulama) başlıklı 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. Kullanıcı tabanınıza bağlı olarak, bu sağlayıcılardan birini veya daha fazlasını desteklemeniz gerekir.
E-posta-şifre kimlik doğrulaması: Deneme yanılma saldırılarını önlemek için oturum açma uç noktası için sıkı bir kota belirleyin.
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. Bu işlemi Google Cloud konsolundaki Identity Toolkit API sayfasından yapabilirsiniz.
E-posta ve şifreyle kimlik doğrulama: E-posta numaralandırma korumasını etkinleştirme
Firebase'in yönetilen e-posta/şifre kimlik doğrulama hizmetini kullanıyorsanız e-posta numaralandırma korumasını etkinleştirin. Bu koruma, kötü niyetli kişilerin hesap adlarını tahmin etmek için projenizin kimlik doğrulama uç noktalarını kötüye kullanmasını engeller.
Çok öğeli kimlik doğrulaması için Google Cloud Identity Platform'ye yükseltme
Oturum açma işleminde daha fazla güvenlik için Google Cloud Identity Platform sürümüne yükselterek çok öğeli kimlik doğrulaması desteği ekleyebilirsiniz. Mevcut Firebase Authentication kodunuz, yükseltme işleminden sonra çalışmaya devam eder.
Anonim kimlik doğrulama
Yalnızca sıcak karşılama için anonim kimlik doğrulamayı kullanın
Kullanıcılar 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 yerine geçmez.
Kullanıcılar verilerini diğer cihazlarda kullanmak isterse onları başka bir oturum açma yöntemine yönlendirin.
Kullanıcı yerel depolama alanını temizlerse veya cihaz değiştirirse anonim kimlik doğrulama verileri kalıcı olmaz. Verilerin tek bir cihazda uygulamanın yeniden başlatılmasının ötesinde kalıcı olması gerekiyorsa kullanıcıyı kalıcı hesaba dönüştürün.
Kullanıcıların oturum açma sağlayıcısına dönüştürülmesini veya e-postalarını doğrulamalarını gerektiren güvenlik kurallarını kullanın
Herkes projenizde anonim hesap oluşturabilir. Bu nedenle, belirli oturum açma yöntemleri veya doğrulanmış e-posta adresleri gerektiren güvenlik kurallarıyla herkese açık olmayan tüm verileri koruyun.
Örneğin:
allow write: if request.auth.token.firebase.sign_in_provider != "anonymous";
allow write: if request.auth.token.email_verified = true;
Cloud Functions savunma sayısı aldı
Hassas bilgileri hiçbir zaman ortam değişkenlerine yerleştirmeyin.
Genellikle kendi kendine barındırılan bir Node.js uygulamasında, özel anahtarlar gibi hassas bilgileri içeren ortam değişkenleri kullanırsınız. Cloud Functions içinde bunu yapmayın. Cloud Functions, işlev çağrıları arasında ortamları yeniden kullandığından hassas bilgiler ortamda depolanmamalıdır.
Firebase API anahtarlarını (gizli olmayan) depolamak için bunları koda yerleştirmeniz yeterlidir.
Firebase Admin SDK'yı Cloud Functions içinde kullanıyorsanız hizmet hesabı kimlik bilgilerini açıkça sağlamanız gerekmez. Bunun nedeni, Admin SDK'ın başlatma sırasında bunları otomatik olarak alabilmesidir.
Google ve Google Cloud API'lerini çağırıyorsanız ve hizmet hesabı kimlik bilgilerine ihtiyacınız varsa Node.js için Google Auth kitaplığı bu kimlik bilgilerini Cloud Functions'de otomatik olarak doldurulan uygulama varsayılan kimlik bilgilerinden alabilir.
Google dışı hizmetler için özel anahtarları ve kimlik bilgilerini Cloud Functions'nızda kullanılabilir hale getirmek için Secret Manager kullanın.
Hassas bilgileri şifreleme
Hassas bilgileri işlevlerinize iletmekten kaçınamıyorsanız bilgileri şifrelemek için kendi özel çözümünüzü oluşturmanız gerekir.
Basit işlevler daha güvenlidir. Karmaşıklığa ihtiyacınız varsa Cloud Run işlevini kullanabilirsiniz.
İşlevlerinizi mümkün olduğunca basit ve anlaşılır tutmaya çalışın. İşlevlerinizdeki karmaşıklık, genellikle zor fark edilen hatalara veya beklenmedik 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ı deneyin.
Ortam yönetimi
Geliştirme ve hazırlık projeleri oluşturma
Geliştirme, hazırlık ve üretim için ayrı Firebase projeleri oluşturun. Aşamalandırma projesinde test edilene kadar istemci kodunu üretime birleştirmeyin.
Ekip erişimini üretim verileriyle sınırlama
Daha büyük bir ekiple çalışıyorsanız önceden tanımlanmış IAM rolleri 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 Firebase Local Emulator Suite (önerilir) kullanıyorsa üretim projesine daha geniş erişim izni vermeniz gerekmeyebilir.
Kitaplık yönetimi
Kitaplıkta yazım hataları veya yeni bakımcılar olup olmadığına dikkat edin.
Projenize kitaplık eklerken kitaplığın ve bakımını yapanların adına dikkat edin. Yüklemek istediğiniz kitaplıkla benzer ada sahip bir kitaplık, kötü amaçlı kod içerebilir.
Değişiklikleri anlamadan kitaplıkları güncellemeyin.
Yükseltme yapmadan önce kullandığınız tüm kitaplıkların değişiklik günlüklerini inceleyin. Yükseltmenin değer kattığından emin olun ve bakım sorumlusunun hâlâ güvendiğiniz bir taraf olup olmadığını kontrol edin.
Gözetim kitaplıklarını geliştirme veya test bağımlılıkları olarak yükleme
Projenizi güvenli olmayan bağımlılıklar için taramak üzere Snyk gibi bir kitaplık kullanın.
Cloud Functions için izlemeyi ayarlayın ve kitaplık güncellemelerinden sonra kontrol edin.
Cloud Functions Logger SDK'sını kullanıyorsanız kitaplık güncellemelerinin neden olduğu davranışlar da dahil olmak üzere olağan dışı davranışları izleyebilir ve bu davranışlarla ilgili uyarı alabilirsiniz.