Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Firebase Cloud Storage Güvenlik Kurallarındaki koşulları kullanın

Bu kılavuz, Cloud Storage için Firebase Güvenlik Kurallarınıza nasıl koşul ekleyeceğinizi gösteren Firebase Güvenlik Kuralları dil kılavuzunun temel sözdizimini öğrenmeye dayanmaktadır .

Cloud Storage Güvenlik Kurallarının birincil yapı taşı koşuldur . Koşul, belirli bir işleme izin verilip verilmeyeceğini belirleyen mantıksal bir ifadedir. Temel kurallar için, koşullar olarak true ve false değişmezleri kullanmak kesinlikle iyi çalışır. Ancak Cloud Storage için Firebase Güvenlik Kuralları, aşağıdakileri yapabilen daha karmaşık koşullar yazmanız için size yollar sunar:

  • Kullanıcı kimlik doğrulamasını kontrol edin
  • Gelen verileri doğrulayın

Doğrulama

Cloud Storage için Firebase Güvenlik Kuralları, Cloud Storage'a güçlü kullanıcı tabanlı kimlik doğrulama sağlamak için Firebase Authentication ile entegre olur. Bu, bir Firebase Authentication jetonunun taleplerine göre ayrıntılı erişim kontrolüne olanak tanır.

Bir kullanıcının gerçekleştirdiği işlemlere Bulut Depolama karşı bir istek doğrulanmış zaman, request.auth değişken kullanıcının doldurulur uid ( request.auth.uid de Firebase Kimlik JWT'de (istemlerinde gibi) request.auth.token ).

Ek olarak, özel kimlik doğrulama kullanılırken, request.auth.token alanında ek talepler ortaya çıkar.

Kimliği doğrulanmamış bir kullanıcı bir istek gerçekleştirdiğinde, request.auth değişkeni null .

Bu verileri kullanarak, dosyaların güvenliğini sağlamak için kimlik doğrulamasını kullanmanın birkaç yaygın yolu vardır:

  • Genel: request.auth yoksay
  • Kimliği doğrulanmış özel: request.auth null olmadığını kontrol edin
  • Kullanıcı özel: request.auth.uid dosyasının bir yol uid request.auth.uid eşit olup olmadığını kontrol edin
  • Grup özel: Özel belirtecin, seçilen bir hak talebiyle eşleşme taleplerini kontrol edin veya bir meta veri alanının mevcut olup olmadığını görmek için dosya meta verilerini okuyun

halka açık

Kullanıcının kimlik doğrulama bağlamını dikkate almadığından, request.auth bağlamını dikkate almayan herhangi bir kural public kural olarak kabul edilebilir. Bu kurallar, oyun varlıkları, ses dosyaları veya diğer statik içerik gibi herkese açık verilerin ortaya çıkarılması için yararlı olabilir.

// Anyone to read a public image if the file is less than 100kB
// Anyone can upload a public file ending in '.txt'
match /public/{imageId} {
  allow read: if resource.size < 100 * 1024;
  allow write: if imageId.matches(".*\\.txt");
}

Kimliği doğrulanmış özel

Bazı durumlarda, verilerin, kimliği doğrulanmamış kullanıcılar tarafından değil, uygulamanızın tüm kimliği doğrulanmış kullanıcıları tarafından görüntülenmesini isteyebilirsiniz. request.auth değişkeni kimliği doğrulanmamış tüm kullanıcılar için null olduğundan, tek yapmanız gereken, kimlik doğrulaması gerektirmek için request.auth değişkeninin var olup olmadığını kontrol etmektir:

// Require authentication on all internal image reads
match /internal/{imageId} {
  allow read: if request.auth != null;
}

Kullanıcıya özel

request.auth için açık request.auth en yaygın kullanım durumu, bireysel kullanıcılara dosyaları üzerinde parçalı izinler sağlamak olacaktır: profil resimleri yüklemekten özel belgeleri okumaya kadar.

Bulut Depolama dosyaları dosyaya tam "yol" olduğundan, bir kullanıcı tarafından kontrol edilen bir dosyayı yapmak için gereken tüm bilgileri (kullanıcının olarak dosya adı öneki benzersiz kullanıcı tanımlama bilgilerinin bir parçasıdır uid kontrol edilebilir) kural değerlendirildiğinde:

// Only a user can upload their profile picture, but anyone can view it
match /users/{userId}/profilePicture.png {
  allow read;
  allow write: if request.auth.uid == userId;
}

Grup özel

Eşit derecede yaygın bir diğer kullanım durumu, birkaç ekip üyesinin paylaşılan bir belge üzerinde işbirliği yapmasına izin vermek gibi bir nesne üzerinde grup izinlerine izin vermek olacaktır. Bunu yapmak için birkaç yaklaşım var:

Bu veriler jeton veya dosya meta verilerinde depolandıktan sonra, bir kural içinden referans alınabilir:

// Allow reads if the group ID in your token matches the file metadata's `owner` property
// Allow writes if the group ID is in the user's custom token
match /files/{groupId}/{fileName} {
  allow read: if resource.metadata.owner == request.auth.token.groupId;
  allow write: if request.auth.token.groupId == groupId;
}

Değerlendirme İste

Yüklemeler, indirmeler, meta veri değişiklikleri ve silme işlemleri, Cloud Storage'a gönderilen request kullanılarak değerlendirilir. Yukarıda açıklandığı gibi request.auth nesnesindeki kullanıcının benzersiz kimliğine ve Firebase Authentication yüküne ek olarak, request değişkeni, request gerçekleştirildiği dosya yolunu, isteğin alındığı zamanı ve aşağıdaki durumlarda yeni resource değerini içerir. istek bir yazmadır. HTTP üstbilgileri ve kimlik doğrulama durumu da dahildir.

request nesne, kullanıcının benzersiz bir kimlik ve Firebase Kimlik yükünü içerir request.auth de açıklanacaktır nesne, kullanıcı Tabanlı Güvenliği dokümanların bölümü.

request nesnesindeki özelliklerin tam listesi aşağıda mevcuttur:

Emlak Tür Açıklama
auth eşleme <dize, dize> Kaydedilir kullanıcı, sağladığında uid , kullanıcının benzersiz bir kimlik ve token Firebase Kimlik JWT iddiaların bir harita. Aksi takdirde null olacaktır.
params eşleme <dize, dize> İsteğin sorgu parametrelerini içeren harita.
path yol İsteğin gerçekleştirildiği path temsil eden bir yol.
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 bir zaman damgası.

Kaynak Değerlendirmesi

Kuralları değerlendirirken, yüklenen, indirilen, değiştirilen veya silinen dosyanın meta verilerini de değerlendirmek isteyebilirsiniz. Bu, yalnızca belirli içerik türlerine sahip dosyaların yüklenmesine veya yalnızca belirli bir boyuttan büyük dosyaların silinmesine izin vermek gibi şeyler yapan karmaşık ve güçlü kurallar oluşturmanıza olanak tanır.

Cloud Storage için Firebase Güvenlik Kuralları, bir Cloud Storage nesnesinde ortaya çıkan meta verilerin anahtar / değer çiftlerini içeren resource nesnesinde dosya meta verileri sağlar. Bu özellikler, veri bütünlüğünü sağlamak için read veya write taleplerinde incelenebilir.

write isteklerinde (karşıya yüklemeler, meta veri güncellemeleri ve silmeler gibi), istek yolunda halihazırda var olan dosya için dosya meta verilerini içeren resource nesnesine ek olarak, request.resource nesnesini de kullanma olanağınız vardır, Yazmaya izin veriliyorsa yazılacak dosya meta verilerinin bir alt kümesini içeren. Veri bütünlüğünü sağlamak veya dosya türü veya boyutu gibi uygulama kısıtlamalarını zorlamak için bu iki değeri kullanabilirsiniz.

resource nesnesindeki özelliklerin tam listesi aşağıda mevcuttur:

Emlak Tür Açıklama
name dizi Nesnenin tam adı
bucket dizi Bu nesnenin bulunduğu paketin adı.
generation int Bu nesnenin Google Cloud Storage nesnesi oluşturma .
metageneration int Bu nesnenin Google Cloud Storage nesnesi meta üretimi .
size int Bayt cinsinden nesnenin boyutu.
timeCreated zaman damgası Bir nesnenin oluşturulduğu zamanı temsil eden bir zaman damgası.
updated zaman damgası Bir nesnenin en son güncellendiği zamanı temsil eden bir zaman damgası.
md5Hash dizi Nesnenin MD5 karması.
crc32c dizi Nesnenin crc32c karması.
etag dizi Bu nesneyle ilişkili etag.
contentDisposition dizi Bu nesneyle ilişkili içerik düzeni.
contentEncoding dizi Bu nesneyle ilişkili içerik kodlaması.
contentLanguage dizi Bu nesneyle ilişkilendirilen içerik dili.
contentType dizi Bu nesneyle ilişkili içerik türü.
metadata eşleme <dize, dize> Ek, geliştirici tarafından belirlenen özel meta verilerin anahtar / değer çiftleri.

request.resource ; generation , metageneration , etag , timeCreated ve updated hariç tüm bunları içerir.

Verileri doğrulayın

Cloud Storage için Firebase Güvenlik Kuralları, dosya adı ve yolunun yanı sıra contentType ve size gibi dosya meta veri özelliklerinin doğrulanması dahil olmak üzere veri doğrulama için de kullanılabilir.

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

Özel işlevler

Firebase Güvenlik Kurallarınız daha karmaşık hale geldikçe, kural kümenizde yeniden kullanabileceğiniz işlevler için koşul kümelerini sarmak isteyebilirsiniz. Güvenlik kuralları özel işlevleri destekler. Özel işlevlerin söz dizimi biraz JavaScript'e benzer, ancak Firebase Güvenlik Kuralları işlevleri, bazı önemli sınırlamalara sahip, alana özgü bir dilde yazılır:

  • Fonksiyonlar yalnızca tek bir return ifadesi içerebilir. Herhangi bir ek mantık içeremezler. Örneğin, döngüleri yürütemezler veya harici hizmetleri arayamazlar.
  • İşlevler, tanımlandıkları kapsamdan işlevlere ve değişkenlere otomatik olarak erişebilir. Örneğin, service firebase.storage kapsamında tanımlanan bir işlev, resource değişkenine ve yalnızca Cloud Firestore için get() ve exists() gibi yerleşik işlevlere erişebilir.
  • İşlevler başka işlevleri çağırabilir ancak tekrarlamayabilir. Toplam çağrı yığını derinliği 10 ile sınırlıdır.
  • Sürüm rules2 , işlevler değişkenleri let anahtar sözcüğünü kullanarak tanımlayabilir. Fonksiyonlar herhangi bir sayıda let bağına sahip olabilir, ancak bir return ifadesiyle bitmelidir.

Bir işlev, function anahtar sözcüğü ile tanımlanır ve sıfır veya daha fazla argüman alır. Örneğin, yukarıdaki örneklerde kullanılan iki tür koşulu tek bir işlevde birleştirmek isteyebilirsiniz:

service firebase.storage {
  match /b/{bucket}/o {
    // True if the user is signed in or the requested data is 'public'
    function signedInOrPublic() {
      return request.auth.uid != null || resource.data.visibility == 'public';
    }
    match /images/{imageId} {
      allow read, write: if signedInOrPublic();
    }
    match /mp3s/{mp3Ids} {
      allow read: if signedInOrPublic();
    }
  }
}

Firebase Güvenlik Kurallarınızdaki işlevleri kullanmak, kurallarınızın karmaşıklığı arttıkça bunların bakımını daha kolay hale getirir.

Sonraki adımlar

Bu koşullar tartışmasından sonra, daha sofistike bir Kural anlayışına sahip olursunuz ve şunları yapmaya hazırsınız:

Temel kullanım durumlarının nasıl ele alınacağını öğrenin ve Kuralları geliştirme, test etme ve dağıtma iş akışını öğrenin: