Firebase kaynaklarınızı ve kullanıcılarınızın verilerini güvende tutmak için bu yönergeleri uygulayın. Her öğe sizin gereksinimleriniz için geçerli olmayabilir ancak uygulamanızı geliştirirken bunları aklınızda 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ı ayarlayın.
Uygulamanıza saldırı olduğundan şüpheleniyorsanız Destek Ekibi'ne ulaşarak durumu en kısa sürede bildirin.
App Check seçeneğini etkinleştirin.
Arka uç hizmetlerinize yalnızca uygulamalarınızın erişebilmesi için destekleyen her hizmette Firebase App Check'i etkinleştirin.
Normal trafik için Cloud Functions öğenizi ölçeklendirecek şekilde yapılandırın
Cloud Functions, uygulamanızın taleplerini karşılamak için otomatik olarak ölçeklenir ancak saldırı durumunda bu, büyük bir fatura anlamına gelebilir. Bunu önlemek için uygulamanızın normal trafiğine göre bir işlevin eşzamanlı örnek 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 gelen trafiği otomatik olarak kısıtlar.
Kullanım ve faturalandırma kontrol panelinizi izlediğinizden emin olun.
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 hizmetlerini kullanıyorsanız projeniz bu hizmet için belirlenen bütçeye ulaştığında geçerli hizmeti duraklatmak üzere harcama sınırları belirleyin.
Kendi kendine DoS saldırılarını önleme: İşlevleri emülatörlerle yerel olarak test etme
Geliştirme sırasında kendinize yanlışlıkla hizmet reddi saldırısı yapabilirsiniz Cloud Functions. Örneğin, sonsuz bir tetikleyici yazma döngüsü oluşturarak. Geliştirme çalışmalarınızı Firebase Local Emulator Suite ile yaparak bu hataların canlı hizmetleri etkilemesini önleyebilirsiniz.
Yanlışlıkla kendinize DOS saldırısı yaparsanız işlevinizi index.js üzerinden silip firebase deploy --only functions
Anında yanıt vermenin daha az önemli olduğu durumlarda işlevleri savunma amaçlı 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 hizmetlerinin API anahtarları gizli değildir
Firebase hizmetleri için API anahtarları, Firebase projenizi ve uygulamanızı yalnızca bu hizmetlere tanıtır. Yetkilendirme, Google Cloud IAM izinleri, Firebase Security Rules ve Firebase App Check aracılığıyla gerçekleştirilir.
Firebase tarafından sağlanan tüm API anahtarları otomatik olarak Firebase ile ilgili API'lerle kısıtlanır. Uygulamanızın kurulumu bu sayfadaki yönergelere uygunsa Firebase hizmetleriyle sınırlı API anahtarlarının gizli 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 tarafından sağlanan API anahtarlarınızı yalnızca Firebase ile ilgili API'ler için kullanın. Uygulamanız başka API'ler (ör. 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 tutma
Firebase hizmetleri için kullanılan API anahtarlarının aksine, FCM sunucu anahtarları (eski FCM HTTP API tarafından kullanılır) hassastır ve gizli tutulmalıdır.
Cloud Messaging için denetleme günlüğünü etkinleştirme
Cloud Messaging için Cloud Audit Logging'i etkinleştirerek FCM kaynaklarınızdaki yönetim etkinliklerini ve erişim etkinliklerini kaydedebilirsiniz.
Hizmet hesabı anahtarlarını gizli tutma
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
Canlı sürüm veya kilitli modda kuralları ilk kullanıma hazırlama
Cloud Firestore, Realtime Database ve Cloud Storage'yi ayarlarken Firebase Security Rules'nizi varsayılan olarak tüm erişimleri 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) için yeni örneklerde 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. Belge eklerken kural da ekleyin.
Güvenlik kurallarını, uygulamanızı yazdıktan sonra lansman öncesi bir görev olarak yazmayın. Bunun yerine, uygulamanızı yazarken güvenlik kurallarını da yazın ve bunları 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 için bu kılavuzları inceleyin.
Doğrulama
Özel kimlik doğrulama: Güvenilir bir (sunucu tarafı) ortamdan JWT oluşturma
Özel bir sistem veya üçüncü taraf hizmeti gibi güvenli bir oturum açma sisteminiz varsa Firebase hizmetleriyle kimlik doğrulaması yapmak için mevcut sisteminizi kullanabilirsiniz. Güvenilir bir ortamdan özel JWT'ler oluşturun, ardından jetonları istemcinize iletin. İstemci, kimlik doğrulaması 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 başlıklı blog yayınını inceleyin.
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 seçeneklerdir. Mümkünse (kullanıcı tabanınıza bağlı olarak) bu sağlayıcılardan birini veya daha fazlasını desteklemeniz gerekir.
E-posta şifresiyle kimlik doğrulama: Kaba kuvvet saldırılarını önlemek için oturum açma uç noktasına sıkı bir kota belirleyin.
Firebase'in yönetilen e-posta şifresi 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 Identity Toolkit API sayfasından yapabilirsiniz.
E-posta şifresiyle kimlik doğrulama: E-posta numaralandırma korumasını etkinleştirme
Firebase'in yönetilen e-posta şifresi 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ı önler.
Çok öğeli kimlik doğrulama için Google Cloud Identity Platform'ye yükseltme
Oturum açma işleminde daha fazla güvenlik için Google Cloud Identity Platform'ye yükselterek çok öğeli kimlik doğrulama desteği ekleyebilirsiniz. Mevcut Firebase Authentication kodunuz, yükseltme işleminden sonra çalışmaya devam eder.
Anonim kimlik doğrulama
Anonim kimlik doğrulamayı yalnızca sıcak oryantasyon için kullanın
Kullanıcılar oturum açmadan önce temel durumu kaydetmek için yalnızca anonim kimlik doğrulama kullanın. Anonim kimlik doğrulama, kullanıcı oturum açma işleminin yerini almaz.
Verilerini diğer cihazlarda kullanmak isteyen kullanıcıları başka bir oturum açma yöntemine geçirin.
Kullanıcı yerel depolama alanını temizler veya cihaz değiştirirse anonim kimlik doğrulama verileri kalıcı olmaz. Uygulama yeniden başlatıldıktan sonra verilerin tek bir cihazda kalması 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çmesini veya e-postalarını doğrulamalarını gerektiren güvenlik kuralları kullanın
Projenizde herkes anonim hesap oluşturabilir. Bu nedenle, 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;
Cloud Functions savunma sayısı aldı
Ortam değişkenlerine hiçbir zaman hassas bilgiler eklemeyin.
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 uygulamasında bu işlemi 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'i bir Cloud Functions içinde kullanıyorsanız hizmet hesabı kimlik bilgilerini açıkça sağlamanız gerekmez. Admin SDK, başlatma sırasında bu bilgileri otomatik olarak alabilir.
Google ve hizmet hesabı kimlik bilgilerini gerektiren Google Cloud API'lerini çağırıyorsanız 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 kullanıcılarınızın kullanımına sunmak için Secret Manager kullanın.
Hassas bilgileri şifreleme
İşlevlerinize hassas bilgiler iletmekten kaçınamıyorsanız bilgileri şifrelemek için kendi özel çözümünüzü geliştirmeniz gerekir.
Basit işlevler daha güvenlidir. Karmaşık işlevlere ihtiyacınız varsa Cloud Run 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 kullanabilirsiniz.
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. İstemci kodu, hazırlama projesinde test edilene kadar üretimle birleştirilmemelidir.
Ekibin üretim verilerine erişimini sınırlandırma
Daha büyük bir ekiple çalışıyorsanız önceden tanımlanmış IAM rollerini veya özel IAM rollerini kullanarak üretim verilerine erişimi sınırlayabilir, böylece hataların ve ihlallerin sonuçlarını hafifletebilirsiniz.
Ekibiniz geliştirme için Firebase Local Emulator Suite (önerilir) kullanıyorsa üretim projesine daha geniş erişim vermeniz gerekmeyebilir.
Kitaplık yönetimi
Kitaplık adlarındaki yazım hatalarına veya yeni geliştiricilere dikkat edin
Projenize kitaplık eklerken kitaplığın adına ve bakımını yapanlara dikkat edin. Yüklemek istediğiniz kitaplığa 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 kitaplıkların değişiklik günlüklerini inceleyin. Yükseltmenin değer kattığından emin olun ve bakım sorumlusunun güvenilirliğinin devam ettiğini kontrol edin.
Watchdog kitaplıklarını geliştirme veya test bağımlılıkları olarak yükleme
Projenizi güvenli olmayan bağımlılıklar açısından taramak için Snyk gibi bir kitaplık kullanın.
Cloud Functions için izleme ayarlarını yapın; kitaplık güncellemelerinden sonra kontrol edin
Cloud Functions günlükçü SDK'sını kullanırsanız kitaplık güncellemelerinden kaynaklanan davranışlar da dahil olmak üzere olağan dışı davranışları izleyebilir ve bunlarla ilgili uyarı alabilirsiniz.