Catch up on everthing we announced at this year's Firebase Summit. Learn more

Temel Güvenlik Kuralları

Firebase Güvenlik Kuralları, depolanan verilerinize erişimi kontrol etmenize olanak tanır. Esnek kurallar sözdizimi, tüm yazma işlemlerinden tüm veritabanına ve belirli bir belgedeki işlemlere kadar her şeyle eşleşen kurallar oluşturabileceğiniz anlamına gelir.

Bu kılavuz, uygulamanızı kurarken ve verilerinizi korurken uygulamak isteyebileceğiniz daha temel kullanım örneklerinden bazılarını açıklamaktadır. Kurallara yazmadan önce Ancak, daha öğrenmek isteyebilirsiniz dilinde onlar yazılmış olmaları ve davranışları .

Senin kuralları güncelleme erişmek için ve, belirtilen adımları izleyin yönetme ve dağıtma Firebase Güvenlik Kuralları .

Varsayılan kurallar: Kilitli mod

Eğer Firebase konsolunda bir veritabanı veya depolama örneğini oluşturduğunuzda Firebase Güvenlik Kuralları verilerinize erişimi (Kilitli modu) kısıtlamak ya da herkesin erişimi (Test modu) izin verip, seçtiğiniz. Bulut Firestore ve Gerçek Zamanlı Veritabanı olarak, Kilitli modu için varsayılan kuralları tüm kullanıcılara erişimini. Cloud Storage'da yalnızca kimliği doğrulanmış kullanıcılar depolama gruplarına erişebilir.

Bulut Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Gerçek Zamanlı Veritabanı

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

Bulut depolama

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Geliştirme-ortam kuralları

Uygulamanız üzerinde çalışırken, verilerinize nispeten açık veya sınırsız erişim isteyebilirsiniz. Uygulamanızı üretime dağıtmadan önce Kurallarınızı güncellediğinizden emin olun. Ayrıca uygulamanızı dağıtmak, eğer herkesin erişebileceği olduğunu unutmayın - Bunu başlattı olsanız bile.

Firebase'in istemcilerin verilerinize doğrudan erişmesine izin verdiğini ve Firebase Güvenlik Kurallarının kötü niyetli kullanıcılar için erişimi engelleyen tek koruma olduğunu unutmayın. Kuralları ürün mantığından ayrı olarak tanımlamanın bir takım avantajları vardır: istemciler güvenliği uygulamaktan sorumlu değildir, hatalı uygulamalar verilerinizi tehlikeye atmaz ve en önemlisi, verileri dünyadan korumak için bir aracı sunucuya güvenmiyorsunuz.

Tüm kimliği doğrulanmış kullanıcılar

Oturum açmış herhangi bir kullanıcının verilerinizi erişilebilir durumda bırakmasını önermesek de, uygulamanızı geliştirirken kimliği doğrulanmış herhangi bir kullanıcıya erişim ayarlamanız yararlı olabilir.

Bulut Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Gerçek Zamanlı Veritabanı

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

Bulut depolama

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Üretime hazır kurallar

Uygulamanızı dağıtmaya hazırlanırken verilerinizin korunduğundan ve kullanıcılarınıza düzgün bir şekilde erişim izni verildiğinden emin olun. Kaldıraç Doğrulama kullanıcı tabanlı erişimi kurmak ve veri tabanlı erişimi kurmak için doğrudan veritabanından okumak için.

Kurallarınızı oluşturma şekliniz, farklı yollardaki verilere erişimi nasıl kısıtladığınızı etkilediğinden, verilerinizi yapılandırırken kurallar yazmayı düşünün.

Yalnızca içerik sahibi erişimi

Bu kurallar, yalnızca içeriğin kimliği doğrulanmış sahibine erişimi kısıtlar. Veriler yalnızca bir kullanıcı tarafından okunabilir ve yazılabilir ve veri yolu kullanıcının kimliğini içerir.

Bu kural işler olduğunda: veri kullanıcı tarafından silolaştırılmış, bu kural iyi çalışıyor - ihtiyaçlar verilerine erişmek için tek bir kullanıcı verilerini oluşturulan aynı kullanıcı ise.

Bu kural değil çalışır olduğunda: - Kullanıcıların verilerin üzerine veya oluşturdukları erişim verilerine mümkün olmayacaktır birden çok kullanıcı yazma gerekir veya aynı veri okumak, bu kural takımı değil çalışır.

Bu kuralı kurmak için: onaylar erişimi isteyen kullanıcı okumak veya yazma verileri bu verilerin sahibi kullanıcı olduğunu bir kural oluşturun.

Bulut Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{userId}/{documents=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId
    }
  }
}

Gerçek Zamanlı Veritabanı

{
  "rules": {
    "some_path": {
      "$uid": {
        // Allow only authenticated content owners access to their data
        ".read": "auth != null && auth.uid == $uid"
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}

Bulut depolama

// Grants a user access to a node matching their user ID
service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

Karma genel ve özel erişim

Bu kural, herkesin bir veri kümesini okumasına izin verir, ancak belirli bir yolda veri oluşturma veya değiştirme yeteneğini yalnızca kimliği doğrulanmış içerik sahibiyle sınırlar.

Bu kural çalıştığında: Bu kural alenen okunabilir unsurları gerektiren uygulamalar için iyi çalışır, ancak ihtiyaç bu öğelerin sahiplerine düzenleme erişimini kısıtlamak için. Örneğin, bir sohbet uygulaması veya blog.

Bu kural işi değil yaptığında: Sadece kural içerik sahibine gibi birden çok kullanıcı aynı veri düzenlemek gerektiğinde, bu kural takımı değil çalışır. Kullanıcılar nihayetinde birbirlerinin verilerinin üzerine yazacaktır.

Bu kuralı kurmak için: kullanıcı yazma veri sahibi olan tüm kullanıcılar (veya yetkilendirilmiş tüm kullanıcılar) ve onaylar için okuma erişimi sağlayan bir kural oluşturma.

Bulut Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow create: if request.auth.uid == request.resource.data.author_uid;
      allow update, delete: if request.auth.uid == resource.data.author_uid;
    }
  }
}

Gerçek Zamanlı Veritabanı

{
// Allow anyone to read data, but only authenticated content owners can
// make changes to their data

  "rules": {
    "some_path": {
      "$uid": {
        ".read": true,
        // or ".read": "auth.uid != null" for only authenticated users
        ".write": "auth.uid == $uid"
      }
    }
  }
}

Bulut depolama

service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read;
      allow write: if request.auth.uid == userId;
    }
  }
}

Öznitelik tabanlı ve Rol tabanlı erişim

Bu kuralın çalışması için verilerinizdeki kullanıcılara nitelikler tanımlamanız ve atamanız gerekir. Firebase Güvenlik Kuralları, erişimi onaylamak veya reddetmek için isteği veritabanınızdan veya dosyanızın meta verilerinden gelen verilerle karşılaştırın.

Bu kural çalıştığında: Eğer kullanıcılara rol atama ediyorsanız, bu kural roller veya belirli kullanıcı gruplarına dayalı sınır erişimi kolay hale getirir. Örneğin, notları depoluyorsanız, "öğrenciler" grubuna (yalnızca içeriklerini okuyun), "öğretmenler" grubuna (konularında okuma ve yazma) ve "müdürler" grubuna (okuma tüm içerik).

Bu kural çalışmıyor olduğunda: In Gerçek Zamanlı Veri Tabanı ve Bulut Depolama, kurallarınız kaldıraç olamaz get() Bulut Firestore kuralları eklemlenebileceğidir yöntemi. Sonuç olarak, kurallarınızda kullandığınız öznitelikleri yansıtmak için veritabanınızı veya dosya meta verilerinizi yapılandırmanız gerekir.

Bu kuralı kurmak için: In Bulut FireStore, sen okuyabileceği kullanıcılarınızın belgelerde içeren bir alanı, daha sonra bu alanı okuyup şartlı erişim izni Kuralınızı yapısı. Realtime Database'de, uygulamanızın kullanıcılarını tanımlayan ve onlara bir alt düğümde rol veren bir veri yolu oluşturun.

Ayrıca ayarlayabilirsiniz Kimlik özel iddialarını ve o andan itibaren bu bilgileri almak auth.token herhangi Firebase Güvenlik Kuralları değişken.

Veri tanımlı nitelikler ve roller

Bu kurallar yalnızca Cloud Firestore ve Realtime Database'de çalışır.

Bulut Firestore

Aşağıdaki kurallar gibi, kurallarınız bir okuma içerdiğinde, Cloud Firestore'da bir okuma işlemi için faturalandırıldığınızı unutmayın.

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, Check a boolean `admin` attribute
    allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
    allow read: true;

    // Alterntatively, for role-based access, assign specific roles to users
    match /some_collection/{document} {
     allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
     allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"
   }
  }
}

Gerçek Zamanlı Veritabanı

{
  "rules": {
    "some_path": {
      "${subpath}": {
        //
        ".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'",
        ".read": true
      }
    }
  }
}

Özel talep özellikleri ve rolleri

Bu kuralları uygulamak kurmak için özel talepler Firebase Kimlik ve daha sonra Kurallarınızda iddiaları kaldıraç.

Bulut Firestore

Aşağıdaki kurallar gibi, kurallarınız bir okuma içerdiğinde, Cloud Firestore'da bir okuma işlemi için faturalandırıldığınızı unutmayın.

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, check for an admin claim
    allow write: if request.auth.token.admin == true;
    allow read: true;

    // Alterntatively, for role-based access, assign specific roles to users
    match /some_collection/{document} {
     allow read: if request.auth.token.reader == "true";
     allow write: if request.auth.token.writer == "true";
   }
  }
}

Gerçek Zamanlı Veritabanı

{
  "rules": {
    "some_path": {
      "$uid": {
        // Create a custom claim for each role or group
        // you want to leverage
        ".write": "auth.uid != null && auth.token.writer == true",
        ".read": "auth.uid != null && auth.token.reader == true"
      }
    }
  }
}

Bulut depolama

service firebase.storage {
  // 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;
  }
}