Bu kılavuz, Firebase Security Rules dilinin temel söz dizimini öğrenme kılavuzunu temel almaktadır Cloud Storage için Firebase Security Rules cihazınıza nasıl koşul ekleyeceğinizi gösterin.
Cloud Storage Security Rules öğesinin birincil yapı taşı koşuldur. CEVAP
koşul, belirli bir işlemin gerçekleşip gerçekleşmeyeceğini belirleyen
izin verilen veya reddedilmelidir. Temel kurallar için true
ve false
değişmez değerlerini kullanma
çok iyi çalışıyor. Ancak Cloud Storage için Firebase Security Rules dili, daha karmaşık koşullar yazmanızı sağlar. Bu koşullar sayesinde:
- Kullanıcı kimlik doğrulamasını kontrol edin
- Gelen verileri doğrulama
Doğrulama
Cloud Storage için Firebase Security Rules, Cloud Storage'a güçlü kullanıcı tabanlı kimlik doğrulama sağlamak için Firebase Authentication ile entegre olur. Bu da Firebase Authentication jetonunun taleplerine göre ayrıntılı erişim denetimi.
Kimliği doğrulanmış bir kullanıcı Cloud Storage adresine istek gönderdiğinde request.auth
değişkeni, kullanıcının uid
(request.auth.uid
) değerinin yanı sıra Firebase Authentication JWT'sinin (request.auth.token
) iddialarıyla doldurulur.
Ayrıca, özel kimlik doğrulama kullanılırken ek hak talepleri gösterilir
request.auth.token
alanına girin.
Kimliği doğrulanmamış bir kullanıcı istek gönderdiğinde request.auth
değişkeni null
olur.
Bu veriler kullanılarak, güvenliği sağlamak için kimlik doğrulamayı kullanmanın dosyalar:
- Herkese açık:
request.auth
adlı kullanıcıyı yoksay - Kimliği gizli:
request.auth
değerininnull
olmadığından emin olun - Kullanıcı gizli:
request.auth.uid
değerininuid
yolu ile aynı olup olmadığını kontrol edin - Grup gizli: Özel jetonun iddialarını seçilen bir taleple eşleşecek şekilde kontrol edin veya Bir meta veri alanının var olup olmadığını görmek için dosya meta verilerini okuma
Herkese açık
request.auth
bağlamını dikkate almayan tüm kurallar
Kullanıcının kimlik doğrulama bağlamını dikkate almadığı için public
kuralı.
Bu kurallar, oyun öğeleri, ses dosyaları veya diğer statik içerikler gibi herkese açık verileri göstermek için yararlı olabilir.
// Anyone to read a public image if the file is less than 100kB // Anyone can upload a public file ending in '.txt' match /public/{imageId} { allow read: if resource.size < 100 * 1024; allow write: if imageId.matches(".*\\.txt"); }
Kimliği doğrulanmış gizli
Bazı durumlarda, kimliği doğrulanmış tüm kullanıcılar tarafından görüntülenebilir
tarafından değil, kimliği doğrulanmamış kullanıcılar tarafından gerçekleştirilmesine izin verilir. request.auth
tarihinden beri
değişkeni kimliği doğrulanmamış tüm kullanıcılar için null
olarak ayarlanırsa tek yapmanız gereken
request.auth
değişkeni, kimlik doğrulamayı zorunlu kılmak için mevcut:
// Require authentication on all internal image reads match /internal/{imageId} { allow read: if request.auth != null; }
Kullanıcıya gizli
Şu ana kadar request.auth
için en yaygın kullanım alanı, kullanıcılara
daha ayrıntılı izinlere sahip kullanıcılar: profil resimleri yüklemek
okumayı öğretiyor.
Cloud Storage içindeki dosyalar tam bir "yola" sahip olduğundan dosyayı yüklemeye çalışın.
bir dosyanın sahibi olan benzersiz, kullanıcıyı tanımlayan benzersiz bir
dosya adı ön ekinde (kullanıcının uid
gibi) yer alan,
kontrol edilir:
// Only a user can upload their profile picture, but anyone can view it match /users/{userId}/profilePicture.png { allow read; allow write: if request.auth.uid == userId; }
Grubu gizli
Yine yaygın bir kullanım alanı, bir nesnede grup izinlerine izin vermektir (ör. birkaç ekip üyesinin paylaşılan bir dokümanda ortak çalışmasına izin verme). Orada bunu yaparken kullanabileceğiniz çeşitli yaklaşımlar vardır:
- Firebase Authentication özel jeton bastırın bir grup üyesi hakkında ek bilgiler (grup kimliği gibi) içeren
- Grup bilgilerini (grup kimliği veya yetkili
uid
listesi gibi) dosya meta verileri
Bu veriler jetonda veya dosya meta verilerinde depolandıktan sonra bir kuraldan referans verilebilir:
// Allow reads if the group ID in your token matches the file metadata's `owner` property // Allow writes if the group ID is in the user's custom token match /files/{groupId}/{fileName} { allow read: if resource.metadata.owner == request.auth.token.groupId; allow write: if request.auth.token.groupId == groupId; }
Değerlendirme İsteme
Yüklemeler, indirmeler, meta veri değişiklikleri ve silme işlemleri
Cloud Storage alıcısına request
gönderildi. Kullanıcının benzersiz kimliğine ve
yukarıda açıklandığı gibi request.auth
nesnesindeki Firebase Authentication yükü,
request
değişkeni, isteğin gerçekleştiği dosya yolunu içerir
isteğin alındığı saat ve yeni resource
değeri
.
request
nesnesi ayrıca kullanıcının benzersiz kimliğini ve
request.auth
nesnesinde Firebase Authentication yükü olacak.
Kullanıcı Tabanlı Güvenlik bölümünde daha ayrıntılı olarak açıklanmıştır
bölümünde bulabilirsiniz.
request
nesnesindeki özelliklerin tam listesini aşağıda bulabilirsiniz:
Özellik | Tür | Açıklama |
---|---|---|
auth |
eşleme<dize, dize> | Kullanıcı giriş yaptığında uid , kullanıcının benzersiz kimliğini ve
token , Firebase Authentication JWT hak talebinin haritası. Aksi takdirde
null |
params |
eşleme<dize, dize> | İsteğin sorgu parametrelerini içeren eşleme. |
path |
yol | İsteğin yapıldığı yolu temsil eden bir path
gerçekleştiriliyor. |
resource |
eşleme<dize, dize> | Yeni kaynak değeri (yalnızca write isteklerinde bulunur).
|
time |
zaman damgası | İsteğin değerlendirildiği sunucu zamanını temsil eden zaman damgası. |
Kaynak Değerlendirme
Kuralları değerlendirirken dosyanın meta verilerini de değerlendirmek isteyebilirsiniz. yükleme, indirme, değiştirme veya silme işlemlerini yapabilir. Bu sayede, yalnızca belirli içerik türlerine sahip dosyaların yüklenmesine veya yalnızca belirli bir boyuttan büyük dosyaların silinmesine izin verme gibi işlemleri yapan karmaşık ve güçlü kurallar oluşturabilirsiniz.
Cloud Storage için Firebase Security Rules, dosya meta verilerini resource
içinde sağlar
ortaya çıkan meta verinin anahtar/değer çiftlerini içeren nesne
Cloud Storage nesne algılandı. Bu özellikler read
veya
Veri bütünlüğünü sağlamak için write
istekleri.
write
isteklerinde (yüklemeler, meta veri güncellemeleri ve silmeler gibi),
dosyanın dosya meta verilerini içeren resource
nesnesine ek
varsa, istek yolunda bulunan URL'leri de
request.resource
nesnesi içerir ve bu, oluşturulacak dosya meta verilerinin bir alt kümesini içerir
yazılması gerekir. Bu iki değeri, uygulamanızın
veya dosya türü ya da boyutu gibi uygulama kısıtlamaları
uygulayabilirsiniz.
resource
nesnesindeki özelliklerin tam listesini aşağıda bulabilirsiniz:
Özellik | Tür | Açıklama |
---|---|---|
name |
dize | Nesnenin tam adı |
bucket |
dize | Bu nesnenin bulunduğu paketin adı. |
generation |
int | Google Cloud Storage nesne oluşturma. |
metageneration |
int | Google Cloud Storage nesne meta oluşturma işlemi gerçekleştirmeniz gerekir. |
size |
int | Nesnenin bayt cinsinden boyutu. |
timeCreated |
zaman damgası | Bir nesnenin oluşturulduğu zamanı gösteren zaman damgası. |
updated |
zaman damgası | Bir nesnenin en son güncellendiği zamanı gösteren zaman damgası. |
md5Hash |
dize | Nesnenin MD5 karması. |
crc32c |
dize | Nesnenin crc32c karması. |
etag |
dize | Bu nesneyle ilişkilendirilen etag. |
contentDisposition |
dize | Bu nesneyle ilişkilendirilen içerik yapısı. |
contentEncoding |
dize | Bu nesneyle ilişkilendirilen içerik kodlaması. |
contentLanguage |
dize | Bu nesneyle ilişkilendirilen içerik dili. |
contentType |
dize | Bu nesneyle ilişkilendirilen içerik türü. |
metadata |
eşleme<dize, dize> | Geliştirici tarafından belirtilen ek özel meta verilerin anahtar/değer çiftleri. |
request.resource
, generation
, metageneration
, etag
, timeCreated
ve updated
hariç bunların tümünü içerir.
Cloud Firestore ile iyileştir
Diğer yetkilendirmeleri değerlendirmek için Cloud Firestore uygulamasındaki dokümanlara erişebilirsiniz ölçütlerine bağlıdır.
firestore.get()
ve firestore.exists()
işlevlerini kullanarak güvenliğiniz
kuralları, gelen istekleri Cloud Firestore kapsamındaki dokümanlarla karşılaştırarak değerlendirebilir.
Hem firestore.get()
hem de firestore.exists()
işlevleri tam olarak bekleniyor
belirtilen belge yollarında geçerlidir. Değişkenleri kullanarak
firestore.get()
ve firestore.exists()
için açıkça çıkış yapmanız gerekir
değişkenleri için $(variable)
söz dizimini kullanır.
Aşağıdaki örnekte, yalnızca bu kullanıcıların dosyalarına okuma erişimini veya belirli kulüplerin üyesi olan kullanıcılar.
service firebase.storage { match /b/{bucket}/o { match /users/{club}/files/{fileId} { allow read: if club in firestore.get(/databases/(default)/documents/users/$(request.auth.id)).memberships } } }
service firebase.storage { match /b/{bucket}/o { match /users/{userId}/photos/{fileId} { allow read: if firestore.exists(/databases/(default)/documents/users/$(userId)/friends/$(request.auth.id)) } } }
Bu Cloud Firestore değerlerini kullanan ilk Cloud Storage Security Rules oluşturup kaydettikten sonra işlevleri için Firebase konsolunda veya Firebase KSA'da iki ürünü bağlamak için izinleri etkinleştirin.
Firebase Security Rules'i yönetme ve dağıtma bölümünde açıklandığı gibi bir IAM rolünü kaldırarak bu özelliği devre dışı bırakabilirsiniz.
Verileri doğrulama
Cloud Storage için Firebase Security Rules, aşağıdakiler dahil olmak üzere veri doğrulama amacıyla da kullanılabilir:
Dosya adı ve yolunun yanı sıra
contentType
ve size
.
service firebase.storage { match /b/{bucket}/o { match /images/{imageId} { // Only allow uploads of any image file that's less than 5MB allow write: if request.resource.size < 5 * 1024 * 1024 && request.resource.contentType.matches('image/.*'); } } }
Özel işlevler
Firebase Security Rules daha karmaşık hale geldikçe, farklı koşulları yerine getirerek, kural kümenizde yeniden kullanabilirsiniz. Güvenlik kuralları özel işlevleri destekleyin. Özel işlevlerin söz dizimi biraz JavaScript'e benzer, ancak Firebase Security Rules işlevleri alana özgü bir dilde yazılmış bazı önemli sınırlamaları vardır:
- İşlevler yalnızca tek bir
return
ifadesi içerebilir. Yapamayacakları mantıktan ibaret değildir. Örneğin, döngüleri yürütemezler. veya harici hizmetleri arayın. - İşlevler, kapsamdaki işlevlere ve değişkenlere otomatik olarak erişebilir
bir belgedir. Örneğin,
service firebase.storage
kapsamı,resource
değişkeni ve yalnızca Cloud Firestore için yerleşik işlevlerget()
veexists()
gibi. - İşlevler diğer işlevleri çağırabilir ancak yinelenmeyebilir. Toplam çağrı yığın derinliği 10 ile sınırlıdır.
rules2
sürümünde işlevler,let
anahtar kelimesini kullanarak değişkenler tanımlayabilir. İşlevler herhangi bir sayıda izin bağlamasına sahip olabilir ancak bir döndürme ile bitmelidir. ifade eder.
Bir fonksiyon, function
anahtar kelimesiyle tanımlanır ve sıfır ya da daha fazla alan alır
bağımsız değişkenlerdir. Örneğin, 2023 Yılbaşı İndirimi
adında kullanılan iki koşul
aşağıdaki örneklerde tek bir işleve dönüştürürsünüz:
service firebase.storage {
match /b/{bucket}/o {
// True if the user is signed in or the requested data is 'public'
function signedInOrPublic() {
return request.auth.uid != null || resource.data.visibility == 'public';
}
match /images/{imageId} {
allow read, write: if signedInOrPublic();
}
match /mp3s/{mp3Ids} {
allow read: if signedInOrPublic();
}
}
}
Firebase Security Rules içinde işlevlerin kullanılması, karmaşıklık bakımından bu işlevlerin sürdürülebilirliğinin daha kolay olmasını sağlar. büyür.
Sonraki adımlar
Koşullarla ilgili olan bu konuşmadan sonra, anlayabildiği ve şunları yapmaya hazır olduğu anlamına gelir:
Temel kullanım alanlarını ele almayı öğrenin ve uygulama geliştirme, kuralları test etme ve dağıtma:
- Sık karşılaşılan senaryoları ele alan kurallar yazın.
- Güvenli olmayan kuralları tespit etmeniz ve bunlardan kaçınmanız gereken durumları inceleyerek bilginizi artırın.
- Cloud Storage emülatörünü ve özel Güvenlik Kuralları test kitaplığını kullanarak kuralları test edin.
- Rules dağıtımı için kullanılabilecek yöntemleri inceleyin.