Cloud Storage for Firebase, bildirimli yol tabanlı bir güvenlik modeli sağlar Cloud Storage için Firebase Security Rules adlı uygulamayı kullanarak hızlı ve kolay bir şekilde dosyalarınızın güvenliğini sağlayabilirsiniz.
Kuralları Anlama
Cloud Storage için Firebase Security Rules, kimlerin okuduğunu ve yazdığını belirlemek amacıyla kullanılır
Cloud Storage içinde depolanan dosyalara ve bunların nasıl
ve hangi meta verileri içerdiklerini
belirlemenize yardımcı olur. Kural türü olarak allow
kuralı (isteğe bağlı olarak belirtilirse read ve write isteklerine izin verir)
koşulu belirtildiğinde, örneğin:
// If no condition is specified, the rule evaluates to true allow read; // Rules can optionally specify a condition allow write: if <condition>; // Rules can also specify multiple request methods allow read, write: if <condition>;
Eşleşen Yollar
Cloud Storage Security Rules match klasöründeki dosyalara erişmek için kullanılan dosya yolları
Cloud Storage. Kurallar, yolların veya joker karakter yollarının aynısını match yapabilir ve
kuralları da iç içe yerleştirilebilir. Hiçbir eşleşme kuralı bir istek yöntemine izin vermiyorsa veya
koşulu false olarak değerlendiriliyor, istek reddedildi.
Tam Eşleşmeler
// Exact match for "images/profilePhoto.png" match /images/profilePhoto.png { allow write: if <condition>; } // Exact match for "images/croppedProfilePhoto.png" match /images/croppedProfilePhoto.png { allow write: if <other_condition>; }
İç İçe Maçlar
// Partial match for files that start with "images" match /images { // Exact match for "images/profilePhoto.png" match /profilePhoto.png { allow write: if <condition>; } // Exact match for "images/croppedProfilePhoto.png" match /croppedProfilePhoto.png { allow write: if <other_condition>; } }
Joker Karakter Eşleşmeleri
Kurallar, joker karakterler kullanarak bir kalıp match için de kullanılabilir. Joker karakter,
tek bir dizeyi temsil eden adlandırılmış değişken
profilePhoto.png veya birden fazla yol segmenti, örneğin
images/profilePhoto.png.
Joker karakter adının etrafına süslü ayraçlar eklenerek (ör.
{string} Birden fazla segment joker karakteri bildirilebilir. Bunun için=**
joker karakterli ad (örneğin, {path=**}):
// Partial match for files that start with "images" match /images { // Exact match for "images/*" // e.g. images/profilePhoto.png is matched match /{imageId} { // This rule only matches a single path segment (*) // imageId is a string that contains the specific segment matched allow read: if <condition>; } // 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ı aşağıdaki koşullardan herhangi biri geçerliyse
condition veya other_condition doğru olarak değerlendirilirken dosya
"images/users/user:12345/profileFotoğraf.png" yalnızca şunun sonucuna tabidir:
other_condition.
Bir joker karakter değişkenine match sağlama dosyası içinden referans verilebilir
ad veya yol yetkilendirmesi:
// Another way to restrict the name of a file match /images/{imageId} { allow read: if imageId == "profilePhoto.png"; }
Cloud Storage Security Rules basamaklamaz ve kurallar yalnızca istek yolu, belirtilen kurallara sahip bir yolla eşleşiyor.
Değerlendirme İsteme
Yüklemeler, indirmeler, meta veri değişiklikleri ve silme işlemleri
Cloud Storage alıcısına request gönderildi. request değişkeni
isteğin gerçekleştirildiği dosya yolu, isteğin gerçekleştirildiği zaman
değeri ve istek yazma işlemiyse yeni resource değeri kullanılır. HTTP üstbilgileri
ve kimlik doğrulama durumu da dahil edilir.
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 kendi başınıza belirli dosyalara izin vermek gibi işlemler için karmaşık ve güçlü veya yalnızca yüklenecek belirli bir boyutun üzerindeki dosyalar silindi.
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 | GCS nesne oluşturma işlemini gözden geçireceğiz. |
metageneration |
int | GCS nesne meta oluşturma işlemi için iyi bir seçimdir. |
size |
int | Nesnenin bayt cinsinden boyutu. |
timeCreated |
zaman damgası | Nesnenin oluşturulduğu zamanı temsil eden bir zaman damgası. |
updated |
zaman damgası | Nesnenin en son ne zaman güncellendiğini gösteren bir zaman damgası. |
md5Hash |
dize | Nesnenin MD5 karma değeri. |
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 hariç bunların tümünü içerir,
metageneration, etag, timeCreated ve updated.
Tam Örnek
Hepsini bir araya getirerek, bir resim için tam bir kural depolama çözümü:
service firebase.storage { match /b/{bucket}/o { match /images { // Cascade read to any image type at any path match /{allImages=**} { allow read; } // Allow write files to the path "images/*", subject to the constraints: // 1) File is less than 5MB // 2) Content type is an image // 3) Uploaded content type matches existing content type (if it exists) // 4) File name (stored in imageId wildcard variable) is less than 32 characters match /{imageId} { allow write: if request.resource.size < 5 * 1024 * 1024 && request.resource.contentType.matches('image/.*') && (resource == null || request.resource.contentType == resource.contentType) && imageId.size() < 32 } } } }
Şimdi de kullanıcı başına ayrıntılı erişim için Firebase Authentication uygulamasını entegre edelim. Kullanıcı Güvenliği bölümüne gidin.