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

Cloud Storage için Firebase Güvenlik Kuralları, depolanan nesnelere erişimi kontrol etmenizi sağlar inceleyebilirsiniz. Esnek kurallar söz dizimi, tüm yazmalardan Cloud Storage'ınıza yapılan tüm işlemleri kontrol etmenizi sağlayacak kurallar belirli bir dosyadaki işlemler için paketi oluşturabilirsiniz.

Bu kılavuzda, Cloud Storage Güvenlik Kuralları'nın temel söz dizimi ve yapısı, oluşturmayı öğreneceksiniz.

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 bildirimi, kuralların kapsamını Cloud Storage ile Cloud Storage Güvenlik Kuralları ve başka ürünler için de geçerli kurallara tabi olacaktır.

Temel okuma/yazma kuralları

Temel kurallar, Cloud Storage'ı 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ı olarak ayarlayın.match /images/profilePhoto.png

Joker karakterleri eşleştir

Kurallar, 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 paketi. 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 Güvenlik Kuralları'nın bu dosya adlarıyla nasıl etkileşime girdiğini gösterir.

Tümü /images/ kök Firebase güvenlik kuralları yalnızca eşleşen dosya adında geçerlidir. Bu nedenle, /images/ kökünde tanımlanan kontroller /mp3s/ kökü için geçerli değil. 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ı 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.

Cloud Storage Güvenlik Kuralları kademeli olarak oluşturulmaz ve kurallar yalnızca istek yolu, belirtilen kurallara sahip bir yolla eşleşiyor.

Sürüm 1

Firebase Güvenlik Kuralları 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 Güvenlik Kuralları'nın 2. sürümünde, 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: bir dosya adı kalıbıyla eşleşen dosyaları ve Cloud Storage'ı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 Güvenlik Kuralları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 Güvenlik Kuralları 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 Bu kurallara yönelik Firebase Güvenlik Kuralları tanımları.

Firebase Güvenlik Kuralları'nın Cloud Storage'a özgü kullanım alanlarını inceleyebilirsiniz: