Cloud Storage için Firebase Security Rules, depolanan nesnelere erişimi kontrol etmenizi sağlar Cloud Storage pakette. Esnek kurallar söz dizimi, tüm yazmalardan Cloud Storage cihazınıza yapılan tüm işlemleri kontrol etmek için kurallar belirli bir dosyadaki işlemler için paketi oluşturabilirsiniz.
Bu kılavuzda, Cloud Storage Security Rules yönergesinin temel söz dizimini ve yapısını oluşturmayı öğreneceksiniz.
Hizmet ve veritabanı beyanı
Cloud Storage için Firebase Security Rules her zaman aşağıdaki beyanla başlar:
service firebase.storage {
// ...
}
service firebase.storage
bildirimi, kuralların kapsamını
Cloud Storage, Cloud Storage Security Rules ile arasındaki çakışmaları önliyor
diğer ürünler için (Cloud Firestore gibi) kurallarını uygulayın.
Temel okuma/yazma kuralları
Temel kurallar, Cloud Storage öğesini tanımlayan bir match
ifadesinden oluşur.
paketler, dosya adı belirten bir eşleşme ifadesi ve allow
ifadesi
belirtilen veriler okunurken ayrıntı vermeye izin verilir. allow
ifade
ilgili erişim yöntemlerini (ör. okuma, yazma) ve koşulları belirtin
izin verilen ya da reddedilen çerçeveleri seçin.
Varsayılan kural grubunuzdaki ilk match
ifadesinde {bucket}
joker karakteri kullanılır
ifadesini kullanabilirsiniz. Saat
joker karakter eşleşmeleri fikrini bir sonraki bölümde daha ayrıntılı olarak ele alacağız.
service firebase.storage {
// The {bucket} wildcard indicates we match files in all Cloud Storage buckets
match /b/{bucket}/o {
// Match filename
match /filename {
allow read: if <condition>;
allow write: if <condition>;
}
}
}
Tüm eşleşme ifadeleri dosyaları işaret eder. Eşleşme ifadesi, belirli bir
dosyası (match /images/profilePhoto.png
için olduğu gibi)
Joker karakterleri eşleştir
Rules, tek bir dosyaya işaret etmenin yanı sıra joker karakterler de kullanabilir
adında eğik çizgiler dahil olmak üzere belirli bir dize önekine sahip herhangi bir dosyayı işaret edebilir
(match /images/{imageId}
gibi).
Yukarıdaki örnekte, eşleşme ifadesinde {imageId}
joker karakter söz dizimi kullanılır.
Bu, kuralın adının başında /images/
olan tüm dosyalar için geçerli olduğu anlamına gelir.
/images/profilePhoto.png
veya /images/croppedProfilePhoto.png
gibi.
Eşleşme ifadesindeki allow
ifade değerlendirilir, imageId
değişkeni
resim dosya adına çözümlenir (örneğin, profilePhoto.png
veya
croppedProfilePhoto.png
.
Dosya sağlamak için match
içinden bir joker karakter değişkenine referans verilebilir
ad veya yol yetkilendirmesi:
// Another way to restrict the name of a file
match /images/{imageId} {
allow read: if imageId == "profilePhoto.png";
}
Hiyerarşik veriler
Daha önce söylediğimiz gibi, bir elektronik tabloda Cloud Storage paket. Dosya adlandırma kurallarından faydalanarak eğik çizgi içeren bir dosyaya benzeyen bir yapıyı taklit edebiliriz. iç içe yerleştirilmiş bir dizi dizin ve alt dizindir. İş yerindeki herhangi bir değişimden Firebase Security Rules öğesinin bu dosya adlarıyla nasıl etkileşimde bulunduğunu gösterir.
Tümü
/images/
kök Firebase Security Rules yalnızca eşleşen dosya adına uygulanır. Bu nedenle,
/images/
kökünde tanımlanan kontroller /mp3s/
kökü için geçerli değildir.
Bunun yerine, farklı dosya adı kalıplarıyla eşleşen açık kurallar yazın:
service firebase.storage {
match /b/{bucket}/o {
match /images/{imageId} {
allow read, write: if <condition>;
}
// Explicitly define rules for the 'mp3s' pattern
match /mp3s/{mp3Id} {
allow read, write: if <condition>;
}
}
}
match
ifadelerini iç içe yerleştirirken iç match
ifadesinin yolu
dış match
ifadesinin yoluna her zaman eklenir. Aşağıdakiler
dolayısıyla iki kural kümesi eşdeğerdir:
service firebase.storage {
match /b/{bucket}/o {
match /images {
// Exact match for "images/profilePhoto.png"
match /profilePhoto.png {
allow write: if <condition>;
}
}
}
}
service firebase.storage {
match /b/{bucket}/o {
// Exact match for "images/profilePhoto.png"
match /images/profilePhoto.png {
allow write: if <condition>;
}
}
}
Yinelemeli eşleşme joker karakterleri
Dosya adının sonundaki dizelerle eşleşen ve bunları döndüren joker karakterlere ek olarak,
Daha karmaşık eşleme için birden fazla segment joker karakteri
joker karakter adına =**
ekleyerek (örneğin, {path=**}
):
// Partial match for files that start with "images"
match /images {
// Exact match for "images/**"
// e.g. images/users/user:12345/profilePhoto.png is matched
// images/profilePhoto.png is also matched!
match /{allImages=**} {
// This rule matches one or more path segments (**)
// allImages is a path that contains all segments matched
allow read: if <other_condition>;
}
}
Bir dosyayla birden fazla kural eşleşirse tüm gösterimlerin OR
sonucunun
yardımcı olacak pek çok
yararlı uygulama vardır. Yani dosyanın eşleştiği herhangi bir kural true
ile değerlendirilirse
sonuç true
.
Yukarıdaki kurallarda, "images/profilePhoto.png" dosyası Okuyucu Gelirleri Yöneticisi'nin
condition
veya other_condition
doğru olarak değerlendirilirken dosya
"images/users/user:12345/profileFotoğraf.png" yalnızca şunun sonucuna tabidir:
other_condition
.
Cloud Storage Security Rules basamaklamaz ve kurallar yalnızca istek yolu, belirtilen kurallara sahip bir yolla eşleşiyor.
Sürüm 1
Firebase Security Rules varsayılan olarak sürüm 1'i kullanır. Sürüm 1'de, yinelemeli joker karakterler
en az bir dosya adı öğesiyle eşleşmesi gerekir. Böylece,
match /images/{filenamePrefixWildcard}/{imageFilename=**}
bir dosya adıyla eşleşiyor
/images/profilePics/profile.png gibi kullanabilirsiniz. Tekliflerinizi otomatikleştirmek ve optimize etmek için
Bunun yerine /images/{imagePrefixorFilename=**}
.
Yinelemeli joker karakterler, eşleşme ifadesinin sonuna gelmelidir.
Daha güçlü özellikleri için sürüm 2'yi kullanmanızı öneririz.
Sürüm 2
Firebase Security Rules sürüm 2'de, yinelemeli joker karakterler sıfır veya daha fazla yolla eşleşiyor
öğeler. Bu nedenle, /images/{filenamePrefixWildcard}/{imageFilename=**}
dosya adları /images/profilePics/profile.png ve /images/badge.png.
URL'nin üstüne rules_version = '2';
ekleyerek sürüm 2'ye dahil olmanız gerekir
güvenlik kurallarınız:
rules_version = '2';
service cloud.storage {
match /b/{bucket}/o {
...
}
}
Eşleşme ifadesi başına en fazla bir yinelemeli joker karakteriniz olabilir, ancak bu joker karakteri, eşleşme ifadesinde herhangi bir yere yerleştirebilirsiniz. Örneğin:
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
// Matches any file in a songs "subdirectory" under the
// top level of your Cloud Storage bucket.
match /{prefixSegment=**}/songs/{mp3filenames} {
allow read, write: if <condition>;
}
}
}
Ayrıntılı işlemler
Bazı durumlarda, read
ve write
metriklerini daha küçük gruplara ayırmak yararlı olur
ayrıntılı işlemlerdir. Örneğin, uygulamanız farklı
daha fazla koşullandırabilir.
read
işlemi, get
ve list
bölümlerine ayrılabilir.
write
kuralı
create
, update
ve delete
olarak ayrılmış:
service firebase.storage { match /b/{bucket}/o { // A read rule can be divided into read and list rules match /images/{imageId} { // Applies to single file read requests allow get: if <condition>; // Applies to list and listAll requests (Rules Version 2) allow list: if <condition>; // A write rule can be divided into create, update, and delete rules match /images/{imageId} { // Applies to writes to file contents allow create: if <condition>; // Applies to updates to (pre-existing) file metadata allow update: if <condition>; // Applies to delete operations allow delete: if <condition>; } } } }
Çakışan eşleşme ifadeleri
Bir dosya adı birden fazla match
ifadesiyle eşleşebilir.
birden fazla allow
ifadesinin bir istekle eşleştiği durumda, erişime izin verilir
koşullardan herhangi biri true
ise:
service firebase.storage {
match b/{bucket}/o {
// Matches file names directly inside of '/images/'.
match /images/{imageId} {
allow read, write: if false;
}
// Matches file names anywhere under `/images/`
match /images/{imageId=**} {
allow read, write: if true;
}
}
}
Yukarıdaki örnekte, tüm adlar
İkinci kural her zaman true
olduğundan /images/
için izin verilir; bu durum şu durumlarda bile geçerlidir:
ilk kural false
.
Kurallar filtre değildir
Verilerinizin güvenliğini sağladıktan ve dosya işlemlerini gerçekleştirmeye başladıktan sonra, filtre olmadıklarından emin olun. Şu gruplar üzerinde işlem gerçekleştiremezsiniz: dosya adı kalıbıyla eşleşen ve Cloud Storage ürününün yalnızca erişmesini bekliyor mevcut istemcinin erişim iznine sahip olduğu dosyalar.
Örneğin, aşağıdaki güvenlik kuralını ele alalım:
service firebase.storage {
match /b/{bucket}/o {
// Allow the client to read files with contentType 'image/png'
match /aFileNamePrefix/{aFileName} {
allow read: if resource.contentType == 'image/png';
}
}
}
Reddedildi: Bu kural aşağıdaki öğeleri reddeder
isteğidir çünkü sonuç kümesi, contentType
image/png
değil:
Web
filesRef = storage.ref().child("aFilenamePrefix"); filesRef.listAll() .then(function(result) { console.log("Success: ", result.items); }) });
Cloud Storage Security Rules politikasındaki kurallar her sorguyu potansiyeline göre değerlendirir bir dosyayı geri döndürebilir ve istek başarısız olur. okuma izni yok. Erişim istekleri izin verir.
Sonraki adımlar
Cloud Storage için Firebase Security Rules hakkında ayrıntılı bilgi edinebilirsiniz:
Kural dilinin bir sonraki temel kavramını, kurallarınızın kullanıcı yetkilendirmesini kontrol etmesine olanak tanıyan conditions Mevcut ve gelen verileri karşılaştırabilir, gelen verileri doğrulayabilir ve daha fazlasını yapabilirsiniz.
Güvenlikle ilgili tipik kullanım alanlarını ve Bunları ele alan Firebase Security Rules tanım.
Cloud Storage ürününe özgü Firebase Security Rules kullanım alanlarını inceleyebilirsiniz: