Firebase kaynaklarınızın ve kullanıcılarınızın verilerinin güvenliğini sağlamak için bu yönergeleri uygulayın. Her öğe, ihtiyaçlarınız için geçerli olmayabilir ancak uygulamanızı geliştirirken bunları göz önünde bulundurun.
Kötüye kullanım amaçlı 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 tespit etmek için Cloud Firestore, Realtime Database, Cloud Storage ve Hosting için izleme ve uyarı ayarlarını yapın
Uygulamanıza saldırı yapıldığını düşünüyorsanız en kısa sürede Destek Ekibi ile iletişime geçerek durumu bildirin.
App Check'yi etkinleştirin
Arka uç hizmetlerinize yalnızca uygulamalarınızın erişebilmesini sağlamak için bu özelliği destekleyen her hizmette Firebase App Check seçeneğini etkinleştirin.
Cloud Functions'nizi normal trafik için ölçeklendirecek şekilde yapılandırma
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ı örneği sayısını sınırlayabilirsiniz.
Sınırlara yaklaşıldığında bildirim almak için uyarı ayarlayın
Hizmetinizde istek artışları varsa genellikle kotalar devreye girer ve uygulamanıza gelen trafiği otomatik olarak azaltır. Kullanım ve faturalandırma kontrol panelinizi izlediğinizden emin olun. Bununla birlikte, kaynak kullanımı beklentileri aştığında bildirim almak için projenizde bütçe uyarıları ayarlayabilirsiniz.
Kendi kendine DoS saldırılarını önleme: İşlevleri emülatörlerle yerel olarak test edin
Cloud Functions geliştirirken yanlışlıkla kendinize DOS uygulamak kolay olabilir: Ö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 uygularsanız işlevinizi index.js
'ten silerek ve ardından firebase deploy --only functions
Anlık yanıt vermenin daha az önemli olduğu durumlarda yapı savunma amaçlı çalışır.
Bir işlevin sonucunu anlık olarak sunmanız gerekmiyorsa sonuçları gruplar halinde 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, API anahtarlarını yalnızca uygulamanızın Firebase projesini Firebase hizmetlerine tanımlamak için kullanır. Veritabanı veya Cloud Storage verilerine erişimi kontrol etmek için API anahtarları kullanılmaz. Bu işlem Firebase Security Rules kullanılarak yapılır. Bu nedenle, Firebase hizmetlerinin API anahtarlarını sır olarak değerlendirmeniz gerekmez ve bunları istemci koduna güvenli bir şekilde yerleştirebilirsiniz. Firebase API anahtarları hakkında daha fazla bilgi edinin.
API anahtarı kısıtlamalarını ayarlama
İstekleri taklit etmek için API anahtarınızı kullanmaya çalışan saldırganlara karşı ek bir caydırıcı olarak, API anahtarlarınızı uygulama istemcilerinize ve kullandığınız API'lere göre kapsamlandırmak için API anahtarı kısıtlamaları ekleyebilirsiniz.
FCM sunucu anahtarlarını gizli tutma
Firebase hizmetlerinin API anahtarlarının aksine, FCM sunucu anahtarları (eski FCM HTTP API tarafından kullanılır) hassastır ve gizli tutulmalıdır.
Hizmet hesabı anahtarlarını gizli tutma
Ayrıca, Firebase hizmetlerinin API anahtarlarından farklı olarak 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'yi ayarlarken Firebase Security Rules'inizi 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.
Yeni Cloud Firestore (üretim modu) ve Realtime Database (kilitli mod) ö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 kurallar 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ı bir veritabanı şeması gibi ele alarak yazın: Yeni bir doküman türü veya yol yapısı kullanmanız gerektiğinde önce ilgili güvenlik kuralını yazın.
Güvenlik kurallarını Local Emulator Suite ile birim test edin; CI'ye ekleyin
Güvenlik kurallarınızın uygulamanızın gelişimine ayak uydurmasını sağlamak için Firebase Local Emulator Suite ile kurallarınızı birim test edin ve bu testleri CI ardışık düzeninize ekleyin. Cloud Firestore ve Realtime Database için bu kılavuzlara bakın.
Doğrulama
Özel kimlik doğrulama: Güvenilir (sunucu tarafı) bir ortamdan JWT oluşturma
Özel sistem veya üçü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 ortamdan özel JWT'ler oluşturun, ardından jetonları kimlik doğrulama için jetonu kullanan istemcinize iletin (iOS+, Android, Web, Unity, C++).
Özel kimlik doğrulamayı üçüncü taraf sağlayıcıyla kullanma örneği için Okta'yı kullanarak Firebase ile kimlik doğrulama 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 en güvenli seçenekler OAuth 2.0 / OpenID Connect sağlayıcı seçenekleridir (Google, Facebook vb.). Mümkünse bu sağlayıcılardan en az birini desteklemeniz gerekir (kullanıcı tabanınıza bağlı olarak).
E-posta ve şifre kimlik doğrulaması: Deneme yanılma saldırılarını önlemek için oturum açma uç noktası için sıkı kota ayarlayın
Firebase'ın 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ştirin
Firebase'ın yönetilen e-posta-şifre kimlik doğrulama hizmetini kullanıyorsanız e-posta numaralandırma korumasını etkinleştirin. Bu koruma, kötü amaçlı kişilerin hesap adlarını tahmin etmek için projenizin kimlik doğrulama uç noktalarını kötüye kullanmasını engeller.
Çok faktörlü kimlik doğrulaması için Google Cloud Identity Platform'e yükseltme
Oturum açarken daha fazla güvenlik için Google Cloud Identity Platform sürümüne yükselerek çok faktörlü kimlik doğrulama desteği ekleyebilirsiniz. Yükseltme işleminden sonra mevcut Firebase Authentication kodunuz çalışmaya devam eder.
Anonim kimlik doğrulama
Yalnızca sıcak ilk katılım için anonim kimlik doğrulamasını kullanın
Anonim kimlik doğrulamayı yalnızca kullanıcılar oturum açmadan önce temel durumlarını kaydetmek için kullanın. Anonim kimlik doğrulaması, kullanıcı oturum açma işleminin yerine geçmez.
Kullanıcıların verilerini diğer cihazlarda kullanmak istemesi durumunda onları başka bir oturum açma yöntemine geçirin
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ından sonra verilerin kalıcı olması gerekiyorsa kullanıcıyı kalıcı hesaba dönüştürün.
Kullanıcıların bir oturum açma sağlayıcısına geçiş yapmasını veya e-postalarını doğrulamasını gerektiren güvenlik kuralları kullanın
Herkes projenizde anonim hesap oluşturabilir. Bu nedenle, herkese açık olmayan tüm verileri belirli oturum açma yöntemlerini veya doğrulanmış e-posta adreslerini 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 güvenlik
Ortam değişkenlerine asla hassas bilgiler koymayın
Kendi kendine barındırılan bir Node.js uygulamasında genellikle gizli anahtarlar gibi hassas bilgileri saklamak için ortam değişkenlerini kullanırsınız. Bunu Cloud Functions'te 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 değildir) depolamak için bunları koda yerleştirmeniz yeterlidir.
Firebase Admin SDK'yi bir Cloud Functions içinde kullanıyorsanız Admin SDK, başlatma sırasında bunları otomatik olarak edinebileceğinden hizmet hesabı kimlik bilgilerini açıkça sağlamanız gerekmez.
Hizmet hesabı kimlik bilgileri gerektiren Google ve Google Cloud API'lerini çağırıyorsanız Node.js için Google Auth kitaplığı, bu kimlik bilgilerini Cloud Functions'te otomatik olarak doldurulan uygulama varsayılan kimlik bilgilerinden alabilir.
Google dışı hizmetlerin özel anahtarlarını ve kimlik bilgilerini Cloud Functions'ünüze sunmak için Secret Manager'i kullanın.
Hassas bilgileri şifreleme
İşlevlerinize hassas bilgiler iletmekten kaçınamıyorsanız bilgileri şifrelemek için kendi özel çözümünüzü üretmeniz gerekir.
Basit işlevler daha güvenlidir. Karmaşıklığa ihtiyacınız varsa Cloud Run
İşlevlerinizi mümkün olduğunca basit ve anlaşılır tutmaya çalışın. İşlevlerinizin karmaşık olması, genellikle tespit edilmesi zor hatalara veya beklenmedik davranışlara neden olabilir.
Karmaşık mantık veya ortam yapılandırmalarına ihtiyacınız varsa Cloud Functions yerine Cloud Run kullanmayı düşünebilirsiniz.
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ırlık projesinde test edilene kadar üretimle birleştirmeyin.
Ekiplerin üretim verilerine erişimini sınırlama
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ırlandırarak 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ıktaki yazım hatalarına veya yeni bakım görevlilerine dikkat edin
Projenize kitaplık eklerken kitaplığın adına ve kitaplığı koruyan kişilere 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ükseltmeden önce kullandığınız kitaplıkların değişiklik günlüklerine göz atın. Yükseltmenin değer kattığından emin olun ve geliştiricinin hâlâ güvendiğiniz bir taraf olduğundan emin olun.
Gözetmen kitaplıklarını geliştirme veya test bağımlıları olarak yükleme
Projenizi güvenli olmayan bağımlılıklara karşı taramak için Snyk gibi bir kitaplık kullanın.
Cloud Functions için izlemeyi ayarlayın ve kitaplık güncellendikten sonra kontrol edin
Cloud Functions günlük kaydı SDK'sını kullanıyorsanız kitaplık güncellemelerinden kaynaklanan davranışlar da dahil olmak üzere olağan dışı davranışları izleyebilir ve uyarı alabilirsiniz.