Dosyaların güvenliğini sağlamayı öğrenin

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.