Check out what’s new from Firebase at Google I/O 2022. Learn more

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öz dizimi, Bulut Depolama grubunuzdaki 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 bildirimi, kuralların kapsamını Cloud Storage'a vererek, Cloud Storage Güvenlik Kuralları ile Cloud Firestore gibi diğer ürünlerin kuralları arasındaki çakışmaları önler.

Temel okuma/yazma kuralları

Temel kurallar, Cloud Storage paketlerini tanımlayan bir match ifadesinden, bir dosya adını belirten bir eşleşme ifadesinden ve belirtilen verilerin okunmasına izin verildiğinde ayrıntı veren bir allow ifadesinden oluşur. allow ifadeleri, ilgili erişim yöntemlerini (örneğin, okuma, yazma) ve erişime izin verilen veya reddedilen koşulları belirtir.

Varsayılan kural kümenizde, ilk match ifadesi, projenizdeki tüm paketler için geçerli olan kuralları belirtmek için bir {bucket} joker ifadesi kullanır. 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 eşleşme ifadesi, match /images/profilePhoto.png olduğu gibi belirli bir dosyaya işaret edebilir.

Maç joker karakterleri

Kurallar, tek bir dosyaya işaret etmenin yanı sıra, match /images/{imageId} gibi, eğik çizgiler de dahil olmak üzere adında belirli bir dize öneki olan herhangi bir dosyayı işaret etmek için joker karakterler kullanabilir.

Yukarıdaki örnekte, eşleşme ifadesi {imageId} joker karakter sözdizimini kullanır. Bu, kuralın /images/ adının başında /images/profilePhoto.png veya /images/croppedProfilePhoto.png gibi herhangi bir dosya için geçerli olduğu anlamına gelir. Match ifadesindeki allow ifadeleri değerlendirildiğinde, imageId değişkeni, profilePhoto.png veya croppedProfilePhoto.png gibi resim dosya adına çözümlenir.

Dosya adı veya yol yetkilendirmesi sağlamak için match içinden bir joker karakter değişkenine başvurulabilir:

// 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ü /images/ köküyle başlayan adlara sahip bir dizi dosyanın durumunu düşünün. Firebase Güvenlik Kuralları yalnızca eşleşen dosya adına uygulanır, bu nedenle /images/ gövdesinde tanımlanan erişim kontrolleri /mp3s/ gövdesine uygulanmaz. 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 match match eklenir. 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>;
      }
    }
  }
}
tutucu5 l10n-yer
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 adının sonunda dizelerle eşleşen ve döndüren joker karakterlere ek olarak, joker karakter adına {path=**} gibi =** eklenerek daha karmaşık eşleştirme için birden çok segmentli bir joker bildirilebilir:

// 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 çok kural bir dosyayla eşleşirse, sonuç tüm kural değerlendirmelerinin sonucunun OR . Diğer bir deyişle, dosyanın eşleştiği herhangi bir kural değerlendirirse true , sonuç true olur.

Yukarıdaki kurallarda, "images/profilePhoto.png" dosyası, condition veya other_condition doğru olarak değerlendirilirse okunabilirken, "images/users/user:12345/profilePhoto.png" dosyası yalnızca other_condition sonucuna tabidir. .

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. Bu nedenle, match /images/{filenamePrefixWildcard}/{imageFilename=**} eşleşmesi, /images/profilePics/profile.png gibi bir dosya adıyla eşleşir, ancak /images/badge.png ile eşleşmez. Bunun yerine /images/{imagePrefixorFilename=**} kullanın.

Ö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=**} , /images/profilePics/profile.png ve /images/badge.png dosya adlarıyla eşleşir.

rules_version = '2'; ekleyerek sürüm 2'ye kaydolmalısınız. 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, read ve write işlemlerini daha ayrıntılı işlemlere ayırmak yararlıdır. Örneğin, uygulamanız dosya oluşturmada dosya silmeden farklı koşullar uygulamak isteyebilir.

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

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

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ının birden fazla match ifadesiyle eşleşmesi mümkündür. Birden çok allow ifadesinin bir istekle eşleşmesi durumunda, koşullardan herhangi biri true erişime izin verilir:

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, dosya adlarının herhangi bir yerinde /images/ dizesine sahip dosyalara yapılan tüm okuma ve yazma işlemlerine izin verilecektir, çünkü ilk kural her zaman false olsa bile ikinci kural her zaman true olacaktır.

Kurallar filtre değildir

Verilerinizi güvenceye alı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';
    }
  }
}

Reddedildi : Sonuç kümesi, contentType image/png olmadığı dosyaları içerebileceğinden, bu kural aşağıdaki isteği reddeder:

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:

  • Kurallarınızın kullanıcı yetkilendirmesini kontrol etmesine, mevcut ve gelen verileri karşılaştırmasına, gelen verileri doğrulamasına ve daha fazlasını yapmasına izin veren Kural dilinin bir sonraki ana konseptini, dinamik koşulları öğrenin.

  • Tipik güvenlik kullanım senaryolarını ve bunlara yönelik Firebase Güvenlik Kuralları tanımlarını inceleyin.

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