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ü niyetli trafiği tespit etmek için Cloud Firestore , Realtime Database , Cloud Storage ve Hosting için izleme ve uyarı ayarlayın
Uygulamanıza yönelik bir saldırıdan şüpheleniyorsanız mümkün olan en kısa sürede Destek ile iletişime geçerek neler olduğunu onlara bildirin.
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.
Bulut İşlevlerinizi normal trafik için ölçeklendirecek şekilde 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ı örnek sayısını sınırlayabilirsiniz .
Sınırlara neredeyse ulaşıldığında bildirim almak için uyarı ayarlayın
Hizmetinizde ani istek artışları varsa, genellikle kotalar devreye girer ve uygulamanıza gelen trafiği otomatik olarak azaltır. Kullanım ve fatura kontrol panelinizi izlediğinizden emin olun, ancak kaynak kullanımı beklentileri aştığında bilgilendirilmek üzere 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 kendinizin DOS yapması 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 engelleyebilirsiniz.
(Ve yanlışlıkla kendiniz DOS yaparsanız, onu index.js
kaldırarak ve ardından
çalıştırarak işlevinizin dağıtımını kaldırın.)
Gerçek zamanlı yanıt vermenin daha az önemli olduğu durumlarda, yapı defansif olarak çalışır
Bir işlevin sonucunu gerçek zamanlı olarak sunmaya ihtiyacınız yoksa, sonuçları gruplar halinde işleyerek kötü amaçlı trafiği azaltabilirsiniz: sonuçları bir Pub/Sub konusuna yayınlayın ve sonuçları programlanmış 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 gerçekleştirilen veritabanına veya Cloud Storage verilerine erişimi kontrol etmek için kullanmaz. Bu nedenle, Firebase hizmetleri için API anahtarlarını sır olarak ele almanıza gerek yoktur 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, kapsamı 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 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ından farklı olarak, 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 modunda veya kilitli modda başlat
Cloud Firestore, Realtime Database ve Cloud Storage'ı kurduğunuzda, tüm erişimi varsayılan olarak 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, yeni Cloud Firestore (üretim modu) ve Realtime Database (kilitli mod) örnekleri için varsayılan ayarlardan biridir. Yeni bir veritabanı eşgörünümü kurarken bu seçeneği belirleyin.
Bulut Depolama 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, güvenlik kurallarını uygulamanızı yazarken yazın ve bunları bir veritabanı şeması gibi ele alı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şimine ayak uydurduğundan emin olmak için kurallarınızı Firebase öykünücü paketiyle birim testi yapın ve bu testleri CI boru hattınıza ekleyin. Cloud Firestore ve Realtime Database için bu kılavuzlara bakın.
kimlik doğrulama
Özel kimlik doğrulama: güvenilir (sunucu tarafı) bir ortamdan JWT'ler oluşturun
Halihazırda güvenli bir oturum açma sisteminiz varsa, ister özel bir sistem ister üçüncü taraf bir hizmet olsun, Firebase hizmetleriyle kimlik doğrulaması yapmak 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 bir sağlayıcıyla özel kimlik doğrulamanın kullanılmasına ilişkin bir örnek için, Okta kullanarak Firebase ile Kimlik Doğrulaması 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. Mümkünse (kullanıcı tabanınıza bağlı olarak) bu sağlayıcılardan birini veya daha fazlasını desteklemelisiniz.
E-posta-şifre kimlik doğrulaması: kaba kuvvet saldırılarını önlemek için oturum açma uç noktası için sıkı 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ın. Bunu Google Cloud Console'daki API sayfasından yapabilirsiniz.
E-posta-şifre kimlik doğrulaması: E-posta numaralandırma korumasını etkinleştirin
Firebase'in yönetilen e-posta-şifre kimlik doğrulama hizmetini kullanıyorsanız, kötü niyetli aktörlerin hesap adlarını tahmin etmek için projenizin kimlik doğrulama uç noktalarını kötüye kullanmasını önleyen e- posta numaralandırma korumasını etkinleştirin .
Ç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. Yükseltme işleminden sonra mevcut Firebase Kimlik Doğrulama kodunuz çalışmaya devam edecektir.
anonim kimlik doğrulama
Anonim kimlik doğrulamasını yalnızca sıcak katılım için kullanın
Anonim kimlik doğrulamayı yalnızca, gerçekten oturum açmadan önce kullanıcıların temel durumunu kaydetmek için kullanın. Anonim kimlik doğrulama, kullanıcı oturum açma işleminin yerine geçmez.
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 aygıtları değiştirirse, anonim kimlik doğrulama verileri kalıcı olmaz. Verileri tek bir cihazda uygulama yeniden başlatmalarının ötesinde tutmanız 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 hazırlama projelerini ayarlama
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.
Ekibin üretim verilerine 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
Kitaplık yazım yanlışlarına veya yeni bakıcılara dikkat edin
Projenize kitaplıklar eklerken, kitaplığın adına ve sahiplerine çok dikkat edin. Yüklemeyi planladığınıza 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 tüm kitaplıkların değişiklik günlüklerine bakın. Yükseltmenin değer kattığından emin olun ve bakımcı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; kitaplık güncellemelerinden sonra kontrol edin
Cloud Functions logger SDK'sını kullanırsanız, kitaplık güncellemelerinin neden olduğu davranışlar da dahil olmak üzere olağan dışı davranışları izleyebilir ve bu tür davranışlar konusunda uyarı alabilirsiniz.
Bulut İşlevi güvenliği
Hassas bilgileri asla bir Bulut İşlevinin ortam değişkenlerine koymayın
Genellikle şirket içinde 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 gömmeniz yeterlidir.
- Firebase Admin SDK'yı 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 çağırı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ışı hizmetler için özel anahtarları ve kimlik bilgilerini Cloud Functions'ınızın kullanımına sunmak için Cloud Secret Manager'ı kullanın.
Hassas bilgileri şifreleyin
Hassas bilgileri Bulut İşlevinize aktarmaktan 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 olabildiğince 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.