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

Cloud Storage için Firebase Security Rules, depolanan nesnelere erişimi kontrol etmenizi sağlar Cloud Storage pakette. Esnek kurallar söz dizimi, tüm yazmalardan Cloud Storage cihazınıza yapılan tüm işlemleri kontrol etmek için kurallar belirli bir dosyadaki işlemler için paketi oluşturabilirsiniz.

Bu kılavuzda, Cloud Storage Security Rules yönergesinin temel söz dizimini ve yapısını oluşturmayı öğreneceksiniz.

Hizmet ve veritabanı beyanı

Cloud Storage için Firebase Security Rules her zaman aşağıdaki beyanla başlar:

service firebase.storage {
    // ...
}

service firebase.storage bildirimi, kuralların kapsamını Cloud Storage, Cloud Storage Security Rules ile arasındaki çakışmaları önliyor diğer ürünler için (Cloud Firestore gibi) kurallarını uygulayın.

Temel okuma/yazma kuralları

Temel kurallar, Cloud Storage öğesini 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ı (match /images/profilePhoto.png için olduğu gibi)

Joker karakterleri eşleştir

Rules, 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 paket. 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 Security Rules öğesinin bu dosya adlarıyla nasıl etkileşimde bulunduğunu gösterir.

Tümü /images/ kök Firebase Security Rules yalnızca eşleşen dosya adına uygulanır. Bu nedenle, /images/ kökünde tanımlanan kontroller /mp3s/ kökü için geçerli değildir. 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ı Okuyucu Gelirleri Yöneticisi'nin 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 Security Rules basamaklamaz ve kurallar yalnızca istek yolu, belirtilen kurallara sahip bir yolla eşleşiyor.

Sürüm 1

Firebase Security Rules 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 Security Rules sürüm 2'de, 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: dosya adı kalıbıyla eşleşen ve Cloud Storage ürününü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 Security Rules politikası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 Security Rules 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 Bunları ele alan Firebase Security Rules tanım.

Cloud Storage ürününe özgü Firebase Security Rules kullanım alanlarını inceleyebilirsiniz: