Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Cloud Storage dili için Firebase Güvenlik Kurallarının temel söz dizimini öğrenin

Cloud Storage için Firebase Güvenlik Kuralları, Cloud Storage paketlerinde depolanan nesnelere erişimi kontrol etmenize olanak tanır. Esnek kurallar sözdizimi, Cloud Storage paketinize yapılan tüm yazma işlemlerinden belirli bir dosyadaki işlemlere kadar herhangi bir işlemi kontrol etmek için kurallar oluşturmanıza olanak tanır.

Bu kılavuz, eksiksiz kural kümeleri oluşturmak için Bulut Depolama Güvenlik Kurallarının temel sözdizimini ve yapısını açıklar.

Hizmet ve veritabanı beyanı

Cloud Storage için Firebase Güvenlik Kuralları her zaman aşağıdaki bildirimle başlar:

service firebase.storage {
    // ...
}

service firebase.storage beyanı böyle Bulut Firestore olarak diğer ürünler için Bulut Depolama Güvenliği Kuralları ve kurallar arasındaki çatışmaları önleyerek, Cloud Storage kurallarını kapsamları.

Temel okuma/yazma kuralları

Temel kurallar oluşur match Bulut Depolama kovalar, bir dosya adı belirten bir maç deyimi tanımlayan açıklamada, ve bir allow belirtilen verileri okuma izin verildiğinde ifade detaylandırma. allow ifadeler erişim izin verilebilir veya reddedilir altında erişim yöntemlerini dahil (örneğin okuma, yazma), ve koşullarını belirtin.

Varsayılan ruleset, ilk match deyimi bir kullanır {bucket} kurallar projedeki tüm kovalar için geçerli belirtmek için joker ifadesini. Bir sonraki bölümde joker karakter eşleşmeleri fikrini daha fazla tartışacağı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 dosyalara işaret eder. Bir maç açıklamada olduğu gibi, belirli bir dosyaya işaret edebilir match /images/profilePhoto.png .

Maç joker karakterleri

Tek bir dosyayı işaret etmek additiont olarak, Kurallar olduğu gibi kesme işaretleri dahil adında belirli bir dize ön ekiyle herhangi bir dosyaya noktaya joker kullanabilirsiniz match /images/{imageId} .

Yukarıdaki örnekte, maç deyimi kullanır {imageId} joker sözdizimi. Bu araçlar kural ile herhangi bir dosya için geçerlidir /images/ gibi adının başında, /images/profilePhoto.png veya /images/croppedProfilePhoto.png . Ne zaman allow maç açıklamada ifadeler değerlendirilir, imageId değişken gibi resmin dosya, sonucuna varılır profilePhoto.png veya croppedProfilePhoto.png .

Bir joker değişken içinden başvurulabilir match dosya adını veya yol yetkilendirme sağlamak için:

// Another way to restrict the name of a file
match /images/{imageId} {
  allow read: if imageId == "profilePhoto.png";
}

hiyerarşik veriler

Daha önce de söylediğimiz gibi, bir Cloud Storage paketi içinde hiyerarşik bir yapı yoktur. Ancak, genellikle dosya adlarında eğik çizgi içeren bir dosya adlandırma kuralı kullanarak, iç içe geçmiş bir dizi dizin ve alt dizin gibi görünen bir yapıyı taklit edebiliriz. Firebase Güvenlik Kurallarının bu dosya adlarıyla nasıl etkileşime girdiğini anlamak önemlidir.

Tüm başlayıp başlamadığını adlarla dosyaları bir dizi durum düşünün /images/ kaynaklanıyor. Üzerinde tanımlı erişim kontrolleri böylece Firebase Güvenlik Kuralları, yalnızca eşleşen dosya da geçerlidir /images/ için geçerli değildir kök /mp3s/ kaynaklanıyor. 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>;
    }
  }
}

Yuva yaparken match ifadeleri, iç yolu match deyimi daima dış yoluna eklenen match deyimi. Aşağıdaki iki kural kümesi bu nedenle 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>;
      }
  }
}

Özyinelemeli eşleşme joker karakterleri

Bir dosya sonuna eşleme ve geri dönüş şeritler, bir çok kademeli bir Joker eklenerek daha karmaşık eşleştirmesi için beyan edilebilir jokerler ek olarak =** gibi Joker adı {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>;
  }
}

Birden fazla kural bir dosya eşleşirse, sonucudur OR tüm kuralları değerlendirmelerin sonucu. Dosya için evalutes eşleşen herhangi bir kural eğer kendisine, true , sonuçtur true .

Ya eğer yukarıdaki kurallara, dosya "images / profilePhoto.png" okunabilir condition veya other_condition sonucuna sadece tabidir: true değerlendirmek dosya "12345 / profilePhoto.png images / kullanıcılar / kullanıcı" iken, other_condition .

Bulut Depolama Güvenlik Kuralları basamaklandırılmaz ve kurallar yalnızca istek yolu belirtilen kurallara sahip bir yolla eşleştiğinde değerlendirilir.

Versiyon 1

Firebase Güvenlik Kuralları, varsayılan olarak sürüm 1'i kullanır. Sürüm 1'de, özyinelemeli joker karakterler, sıfır veya daha fazla öğeyle değil, bir veya daha fazla dosya adı öğesiyle eşleşir. Böylece, match /images/{filenamePrefixWildcard}/{imageFilename=**} /images/profilePics/profile.png gibi bir dosya adı ile eşleşir, ancak /images/badge.png değil. Kullanım /images/{imagePrefixorFilename=**} yerine.

Özyinelemeli joker karakterler, bir eşleşme ifadesinin sonunda gelmelidir.

Daha güçlü özellikleri için sürüm 2'yi kullanmanızı öneririz.

Versiyon 2

Firebase Güvenlik Kuralları'nın 2. sürümünde, özyinelemeli joker karakterler sıfır veya daha fazla yol öğesiyle eşleşir. Böylece, /images/{filenamePrefixWildcard}/{imageFilename=**} maçları /images/profilePics/profile.png ve /images/badge.png filenames.

Sen dahil olunmalıdır sürüm 2 ekleyerek rules_version = '2'; güvenlik kurallarınızın en üstünde:

rules_version = '2';
service cloud.storage {
  match /b/{bucket}/o {
   ...
 }
}

Her eşleşme ifadesi için en fazla bir özyinelemeli joker karakteriniz olabilir, ancak sürüm 2'de bu joker karakteri eşleşme ifadesinin herhangi bir yerine 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>;
   }
  }
}

Granüler işlemler

Bazı durumlarda, yıkmak için yararlıdır read ve write daha parçalı operasyonları içine. Örneğin, uygulamanız dosya oluşturmada dosya silmeden farklı koşullar uygulamak isteyebilir.

Bir read işlemi ayrılabilir get ve list .

Bir write kuralı ayrılabilir create , update ve delete :

service firebase.storage {
  match /b/{bucket}/o {
    // A read rule can be divided into read and list rules
    match /images/{imageId} {
      // Applies to single document 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 nonexistent files
      allow create: if <condition>;

      // Applies to updates to 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 maç için olması mümkündür match deyimi. Birden durumda allow ifadeler bir istekle eşleşen, erişim koşullardan herhangi eğer izin verilir true :

service firebase.storage {
  match b/{bucket}/o {
    // Matches any filename containing string '/images/'.
    match /images/{imageId} {
      allow read, write: if false;
    }

    // Matches all filenames containing string `/images/`
    match /images/{imageId=**} {
      allow read, write: if true;
    }
  }
}

Yukarıdaki örnekte, tüm okur ve dize ile dosyalara yazar /images/ ikinci kural her zaman olduğundan her yere kendi dosya içinde izin verilecek true ilk kural her zaman olmasına rağmen false .

Kurallar filtre değildir

Verilerinizin güvenliğini sağlayıp dosya işlemlerini yapmaya başladığınızda, güvenlik kurallarının filtre olmadığını unutmayın. Bir dosya adı kalıbıyla eşleşen bir dizi dosya üzerinde işlem gerçekleştiremez ve Cloud Storage'ın yalnızca geçerli istemcinin erişim iznine sahip olduğu dosyalara erişmesini bekleyemezsiniz.

Örneğin, aşağıdaki güvenlik kuralını alın:

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';
    }
  }
}

Reddedilen: sonuç kümesi dosyalarını içerebilir, çünkü bu kuralı, aşağıdaki talebini reddetti contentType değildir image/png :

filesRef = storage.ref().child("aFilenamePrefix");

filesRef.listAll()
    .then(function(result) {
      console.log("Success: ", result.items);
    })
});

Bulut Depolama Güvenlik Kurallarındaki kurallar, her sorguyu olası sonucuna göre değerlendirir ve istemcinin okuma izninin olmadığı bir dosyayı döndürebiliyorsa isteği başarısız olur. Erişim istekleri, kurallarınız tarafından belirlenen kısıtlamalara uymalıdır.

Sonraki adımlar

Bulut Depolama için Firebase Güvenlik Kuralları konusundaki anlayışınızı derinleştirebilirsiniz:

Cloud Storage'a özel Firebase Güvenlik Kuralları kullanım örneklerini inceleyebilirsiniz: