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ı ayarlayın.
Uygulamanıza saldırı olduğundan şüpheleniyorsanız Destek Ekibi'ne ulaşarak neler olduğunu en kısa sürede bildirin.
App Check seçeneğini etkinleştirin.
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.
Cloud Functions öğenizi normal trafik için ölçeklenecek ş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ı ö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 izlediğinizden emin olun. Ayrıca, kaynak kullanımı beklentileri aştığında bildirim almak için projenizde bütçe uyarıları ayarlayabilirsiniz.
Kendini hizmet reddi saldırılarından koruma: İşlevleri emülatörlerle yerel olarak test etme
Geliştirme sırasında Cloud Functions ile kendinize yanlışlıkla hizmet reddi saldırısı yapabilirsiniz. Örneğin, sonsuz bir tetikleyici yazma döngüsü oluşturarak. Geliştirme işlemlerinizi Firebase Local Emulator Suite ile yaparak bu hataların canlı hizmetleri etkilemesini önleyebilirsiniz.
Kendinize yanlışlıkla hizmet engelleme saldırısı yaparsanız işlevinizi index.js adresinden silerek dağıtımı geri alın ve ardından firebase deploy --only functions
Anında yanıt verme özelliğinin daha az önemli olduğu durumlarda işlevleri savunma amaçlı olarak yapılandırın.
Bir işlevin sonucunu gerçek zamanlı 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ı düzenli aralıklarla planlanmış bir işlevle 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'lerle sınırlandırılı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'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. Belge eklerken kural ekleyin.
Uygulamanızı yazdıktan sonra, lansman öncesi bir görev olarak güvenlik kuralları yazmayın. Bunun yerine, uygulamanızı yazarken güvenlik kurallarını da 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 ve ardından jetonları, kimlik doğrulamak için jetonu kullanan istemcinize iletin (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-şifre kimlik doğrulaması: 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ın verilerini diğer cihazlarda da kullanmak istemeleri durumunda, kullanıcıları başka bir oturum açma yöntemine dönüştürme
Kullanıcı yerel depolama alanını temizlerse veya cihaz değiştirirse anonim kimlik doğrulama verileri kalıcı olmaz. Tek bir cihazda uygulamanın yeniden başlatılmasının ötesinde verileri kalıcı hale getirmeniz 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, tüm herkese açık olmayan 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ı
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. Bu işlemi Cloud Functions içinde 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ışı hizmetlerin özel anahtarlarını ve kimlik bilgilerini Cloud Functions için kullanılabilir hale getirmek üzere 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şık işlevlere 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ığa 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ıklardaki yazım hatalarına veya yeni bakımcılar eklenmesine dikkat edin.
Projenize kitaplık eklerken kitaplığın ve bakımını yapanların adına dikkat edin. Yüklemek istediğiniz kitaplığa benzer ada sahip bir kitaplık, zararlı 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 olduğunu kontrol edin.
Gözetimci 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 ayarlama; kitaplık güncellemelerinden sonra kontrol etme
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.