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.