Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Temel Güvenlik Kuralları

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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. Ancak, kuralları yazmaya başlamadan önce, bunların yazıldığı dil ve davranışları hakkında daha fazla bilgi edinmek isteyebilirsiniz.

Kurallarınıza erişmek ve bunları güncellemek için Firebase Güvenlik Kurallarını yönetme ve dağıtma bölümünde belirtilen adımları izleyin.

Varsayılan kurallar: Kilitli mod

Firebase konsolunda bir veritabanı veya depolama örneği oluşturduğunuzda, Firebase Güvenlik Kurallarınızın verilerinize erişimi kısıtlamasını mı ( Kilitli mod ) yoksa herkesin erişimine izin vermesini mi ( Test modu ) seçersiniz. Cloud Firestore ve Realtime Database'de, Kilitli mod için varsayılan kurallar tüm kullanıcıların erişimini reddeder. 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ğıtırsanız, başlatmamış olsanız bile herkese açık olduğunu unutmayın.

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. Kullanıcı tabanlı erişimi ayarlamak ve veri tabanlı erişimi ayarlamak için doğrudan veritabanınızdan okumak için Kimlik Doğrulamadan yararlanın.

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şe yaradığında: Bu kural, veriler kullanıcı tarafından silolanırsa iyi çalışır - verilere erişmesi gereken tek kullanıcı, verileri oluşturan kullanıcıysa.

Bu kural çalışmadığında: Birden çok kullanıcının aynı verileri yazması veya okuması gerektiğinde bu kural kümesi çalışmaz - kullanıcılar verilerin üzerine yazar veya oluşturdukları verilere erişemez.

Bu kuralı ayarlamak için: Verileri okumak veya yazmak için erişim talep eden kullanıcının bu verilere sahip olduğunu onaylayan 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 işe yaradığında: Bu kural, herkes tarafından okunabilir öğeler gerektiren ancak düzenleme erişimini bu öğelerin sahipleriyle kısıtlaması gereken uygulamalar için iyi çalışır. Örneğin, bir sohbet uygulaması veya blog.

Bu kural çalışmadığında: Yalnızca içerik sahibi kuralı gibi, birden çok kullanıcının aynı verileri düzenlemesi gerektiğinde bu kural kümesi çalışmaz. Kullanıcılar nihayetinde birbirlerinin verilerinin üzerine yazacaktır.

Bu kuralı ayarlamak için: Tüm kullanıcılar (veya tüm kimliği doğrulanmış kullanıcılar) için okuma erişimi sağlayan ve kullanıcının yazma verilerinin sahibi olduğunu onaylayan bir kural oluşturun.

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: Kullanıcılara bir rol atıyorsanız, bu kural, rollere veya belirli kullanıcı gruplarına göre erişimi sınırlamayı kolaylaştırır. Ö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ışmadığında: Realtime Database ve Cloud Storage'da kurallarınız Cloud Firestore kurallarının dahil edebileceği get() yönteminden yararlanamaz. 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ı ayarlamak için: Cloud Firestore'da, kullanıcılarınızın belgelerine okuyabileceğiniz bir alan ekleyin, ardından kuralınızı bu alanı okuyacak ve koşullu erişim verecek şekilde yapılandırın. 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 Kimlik Doğrulama'da özel talepler ayarlayabilir ve ardından bu bilgileri herhangi bir Firebase Güvenlik auth.token değişkeninden alabilirsiniz.

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 için Firebase Authentication'da özel talepler oluşturun ve ardından kurallarınızdaki taleplerden yararlanın.

Bulut Firestore

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;
  }
}

Kiracılık özellikleri

Bu kuralları uygulamak için Google Cloud Identity Platform'da ( GCIP ) çoklu kiracılık kurun ve ardından kurallarınızdaki kiracıdan yararlanın. Aşağıdaki örnekler, belirli bir kiracıdaki bir kullanıcıdan yazma işlemlerine izin verir, örneğin tenant2-m6tyz

Bulut Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // For tenant-based access control, check for a tenantID
    allow write: if request.auth.token.firebase.tenant == 'tenant2-m6tyz';
    allow read: true;
  }
}

Gerçek Zamanlı Veritabanı

{
  "rules": {
    "some_path": {
      "$uid": {
        // Only allow reads and writes if user belongs to a specific tenant
        ".write": "auth.uid !== null && auth.token.firebase.tenant === 'tenant2-m6tyz'",
        ".read": "auth.uid !== null
      }
    }
  }
}

Bulut depolama

service firebase.storage {
  // Only allow reads and writes if user belongs to a specific tenant
  match /files/{tenantId}/{fileName} {
    allow read: if request.auth != null;
    allow write: if request.auth.token.firebase.tenant == tenantId;
  }
}