Güvenlik Kuralları'nın işleyiş şekli

Güvenlik, uygulama geliştirme yapbozunun en karmaşık parçalarından biri olabilir. Çoğu uygulamada, geliştiricilerin kimlik doğrulama (kullanıcının kim olduğu) ve yetkilendirmeyi (kullanıcının ne yapabileceğini) işler.

Firebase Security Rules, orta (sunucu) katmanı kaldırır ve yola dayalı katmanları belirtmenize olanak tanır verilerinize doğrudan bağlanan istemciler için gerekli izinleri sağlar. Bu kılavuzu kullanarak Kuralların gelen isteklere nasıl uygulandığı hakkında daha fazla bilgi edinin.

Kuralları hakkında daha fazla bilgi edinmek için bir ürün seçin.

Cloud Firestore

Temel yapı

Cloud Firestore ve Cloud Storage içindeki Firebase Security Rules, aşağıdaki yapıyı ve söz dizimini kullanır:

service <<name>> {
  // Match the resource path.
  match <<path>> {
    // Allow the request if the following conditions are true.
    allow <<methods>> : if <<condition>>
  }
}

Kuralları oluştururken aşağıdaki temel kavramları anlamanız önemlidir:

  • İstek: allow ifadesi içinde çağrılan yöntem veya yöntemler. Bunlar: bu yöntemleri kullanabilirsiniz. Standart yöntemler şunlardır: get, list, create, update ve delete. read ve write kolaylık yöntemleri belirtilen veritabanı veya depolama yolunda geniş okuma ve yazma erişimini etkinleştirin.
  • Yol: URI yolu.
  • Kural: Bir şeye izin veren bir koşulu içeren allow isteği gönderin.

Güvenlik kuralları sürüm 2

Mayıs 2019 itibarıyla Firebase güvenlik kurallarının 2. sürümü kullanıma sunuldu. Kuralların 2. sürümü, yinelemeli joker karakterler {name=**}. Planlıyorsanız sürüm 2'yi kullanmalısınız. koleksiyon grubu sorgularını kullanın. Şunu etkinleştirmeniz gerekir: rules_version = '2'; uygulamasını güvenliğinizdeki ilk satır haline getirerek sürüm 2'yi indirin kurallarınız:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

Eşleşen yollar

Tüm eşleşme ifadeleri koleksiyonları değil, dokümanları işaret etmelidir. Maç ifadesi, match /cities/SF ürününde olduğu gibi belirli bir dokümana işaret edebilir veya joker karakterler kullanabilir belirtilen yoldaki herhangi bir dokümana işaret etmesini sağlar (ör. match /cities/{city}).

Yukarıdaki örnekte, eşleşme ifadesinde {city} joker karakter söz dizimi kullanılır. Bu, kuralın cities koleksiyonundaki tüm dokümanlar için geçerli olduğu anlamına gelir: /cities/SF veya /cities/NYC. Eşleşme ifadesindeki allow ifadeleri city değişkeni şehir dokümanının adına, SF veya NYC gibi.

Eşleşen alt koleksiyonlar

Cloud Firestore ürünündeki veriler doküman koleksiyonları halinde düzenlenir ve her bir hiyerarşiyi alt koleksiyonlar yoluyla genişletebilir. Bu nedenle, ve güvenlik kurallarının hiyerarşik verilerle nasıl etkileşime girdiğini anlamanızı sağlar.

cities koleksiyonundaki her dokümanın bir landmarks alt koleksiyon. Güvenlik kuralları yalnızca eşleşen yolda geçerli olduğundan cities koleksiyonunda tanımlanan erişim denetimleri landmarks alt koleksiyonunda geçerli değildir. Bunun yerine, erişimi kontrol etmek için açık kurallar yazın alt koleksiyonlara:

service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city} {
      allow read, write: if <condition>;

      // Explicitly define rules for the 'landmarks' subcollection
      match /landmarks/{landmark} {
        allow read, write: if <condition>;
      }
    }
  }
}

match ifadelerini iç içe yerleştirirken iç match ifadesinin yolu her zaman dış match ifadesinin yolu ile göreceli olarak. Aşağıdaki kural kümeleri dolayısıyla eşdeğerdir:

service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city} {
      match /landmarks/{landmark} {
        allow read, write: if <condition>;
      }
    }
  }
}
service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city}/landmarks/{landmark} {
      allow read, write: if <condition>;
    }
  }
}

Yinelemeli joker karakterler

Kuralların rastgele derin bir hiyerarşiye uygulanmasını istiyorsanız yinelemeli joker karakter söz dizimi, {name=**}:

service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the cities collection as well as any document
    // in a subcollection.
    match /cities/{document=**} {
      allow read, write: if <condition>;
    }
  }
}

Yinelemeli joker karakter söz dizimini kullanırken joker karakter değişkeni, Doküman derin bir şekilde iç içe yerleştirilmiş bir koleksiyonda bulunsa bile, eşleşen yol segmentinin tamamı alt koleksiyon oluşturun. Örneğin, yukarıda listelenen kurallar, /cities/SF/landmarks/coit_tower adresinde bulunan bir doküman ve document değişkeni SF/landmarks/coit_tower olur.

Bununla birlikte, yinelemeli joker karakterlerin davranışının kurallara bağlı olduğunu unutmayın sürümünü değil.

Sürüm 1

Güvenlik kuralları varsayılan olarak sürüm 1'i kullanır. Sürüm 1'de, yinelemeli joker karakterler bir veya daha fazla yol öğesiyle eşleşiyor. Boş bir yolla eşleşmezler, bu nedenle match /cities/{city}/{document=**}, alt koleksiyonlardaki dokümanlarla eşleşir, ancak cities koleksiyonunda yok, ancak match /cities/{document=**} eşleşiyor hem cities koleksiyonundaki hem de alt koleksiyonlardaki dokümanlara eşittir.

Yinelemeli joker karakterler, eşleşme ifadesinin sonuna gelmelidir.

Sürüm 2

Güvenlik kurallarının 2. sürümünde, yinelenen joker karakterler sıfır veya daha fazla yol öğesiyle eşleşir. match/cities/{city}/{document=**}, tüm alt koleksiyonlardaki dokümanların yanı sıra cities koleksiyonundaki dokümanlarla eşleşir.

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.firestore {
  match /databases/{database}/documents {
    // Matches any document in the cities collection as well as any document
    // in a subcollection.
    match /cities/{city}/{document=**} {
      allow read, write: if <condition>;
    }
  }
}

Eşleşme ifadesi başına en fazla bir yinelenen joker karakteriniz olabilir ancak 2 sürümünde bu joker karakteri eşleşme ifadesinin herhangi bir yerine yerleştirebilirsiniz. Örneğin:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the songs collection group
    match /{path=**}/songs/{song} {
      allow read, write: if <condition>;
    }
  }
}

Koleksiyon grubu sorguları kullanıyorsanız 2. sürümü kullanmanız gerekir. Koleksiyon grubu sorgularının güvenliğini sağlama başlıklı makaleyi inceleyin.

Çakışan eşleşme ifadeleri

Bir belgenin birden fazla match ifadesiyle eşleşmesi mümkündür. birden fazla allow ifadesinin bir istekle eşleştiği durumda, erişime izin verilir koşullardan herhangi biri true ise:

service cloud.firestore {
  match /databases/{database}/documents {
    // Matches any document in the 'cities' collection.
    match /cities/{city} {
      allow read, write: if false;
    }

    // Matches any document in the 'cities' collection or subcollections.
    match /cities/{document=**} {
      allow read, write: if true;
    }
  }
}

Yukarıdaki örnekte, birinci kural her zaman false olsa bile ikinci kural her zaman true olduğu için cities koleksiyonuna yapılan tüm okuma ve yazma işlemlerine izin verilir.

Güvenlik kuralı sınırları

Güvenlik kurallarıyla çalışırken aşağıdaki sınırlara dikkat edin:

Sınır Ayrıntılar
İstek başına maksimum exists(), get() ve getAfter() çağrısı sayısı
  • Tek belgeli istekler ve sorgu istekleri için 10.
  • Çok belgeli okumalar, işlemler ve toplu yazmalar için 20. Her işlemde yukarıdaki 10 sınırı da geçerlidir.

    3 yazma işlemiyle bir toplu yazma isteği oluşturduğunuzu ve güvenlik kurallarınızın her yazma işlemini doğrulamak için 2 belge erişimi çağrısı kullandığını varsayalım. Bu durumda her yazma işlemi 10 erişim çağrısından 2'sini; toplu yazma isteği ise 20 erişim çağrısından 6'sını kullanır.

Her iki sınırın da aşılması, "izin verilmedi" hatasıyla sonuçlanır.

Bazı belge erişimi çağrıları önbelleğe alınabilir. Önbelleğe alınan çağrılar sınırlamaya dahil edilmez.

Maksimum iç içe yerleştirilen match ifadesi derinliği 10
Yol segmentlerinde, iç içe yerleştirilmiş bir grup match ifadesinde izin verilen maksimum yol uzunluğu 100
İç içe yerleştirilen bir grup match ifadesinde izin verilen maksimum yol yakalama değişkeni sayısı 20
Maksimum işlev çağrısı derinliği 20
Maksimum işlev bağımsız değişkeni sayısı 7
İşlev başına maksimum let işlev bağlama sayısı 10
Maksimum yinelenen veya döngüsel işlev çağrısı sayısı 0 &lpar;izin verilmez&rpar;
İstek başına değerlendirilen maksimum ifade sayısı 1.000
Maksimum kural grubu boyutu Kural kümeleri iki boyut sınırına uymalıdır:
  • Firebase konsolundan veya firebase deploy ile CLI'den yayınlanan kural grubu metin kaynağının boyutu için 256 KB sınır.
  • Oluşturulan derlenmiş kural grubunun boyutu için 250 KB sınır Firebase'in kaynağı işlediğinde ve arka uç sağlar.

Cloud Storage

Temel yapı

Cloud Firestore ve Cloud Storage içindeki Firebase Security Rules, aşağıdaki yapıyı ve söz dizimini kullanır:

service <<name>> {
  // Match the resource path.
  match <<path>> {
    // Allow the request if the following conditions are true.
    allow <<methods>> : if <<condition>>
  }
}

Kuralları oluştururken aşağıdaki temel kavramları anlamanız önemlidir:

  • İstek: allow ifadesi içinde çağrılan yöntem veya yöntemler. Bunlar: bu yöntemleri kullanabilirsiniz. Standart yöntemler şunlardır: get, list, create, update ve delete. read ve write kolaylık yöntemleri belirtilen veritabanı veya depolama yolunda geniş okuma ve yazma erişimini etkinleştirin.
  • Yol: URI yolu.
  • Kural: Bir şeye izin veren bir koşulu içeren allow isteği gönderin.

Eşleşen yollar

Cloud Storage Security Rules match Cloud Storage içindeki dosyalara erişmek için kullanılan dosya yolları. Kurallar, yolların veya joker karakterli yolların matchsını alabilir ve kuralları da iç içe yerleştirilebilir. Hiçbir eşleşme kuralı bir istek yöntemine izin vermiyorsa veya koşul false olarak değerlendiriliyorsa istek reddedilir.

Tam eşleşmeler

// Exact match for "images/profilePhoto.png"
match /images/profilePhoto.png {
  allow write: if <condition>;
}

// Exact match for "images/croppedProfilePhoto.png"
match /images/croppedProfilePhoto.png {
  allow write: if <other_condition>;
}

İç içe eşleşmeler

// Partial match for files that start with "images"
match /images {
  // Exact match for "images/profilePhoto.png"
  match /profilePhoto.png {
    allow write: if <condition>;
  }

  // Exact match for "images/croppedProfilePhoto.png"
  match /croppedProfilePhoto.png {
    allow write: if <other_condition>;
  }
}

Joker karakter eşleşmeleri

Kurallar, joker karakterler kullanarak bir kalıp match için de kullanılabilir. Joker karakter, tek bir dizeyi temsil eden adlandırılmış değişken profilePhoto.png veya birden fazla yol segmenti, örneğin images/profilePhoto.png.

Joker karakter adının etrafına süslü ayraçlar eklenerek (ör. {string} Birden fazla segment joker karakteri bildirilebilir. Bunun için=** joker karakterli ad (örneğin, {path=**}):

// Partial match for files that start with "images"
match /images {
  // Exact match for "images/*"
  // e.g. images/profilePhoto.png is matched
  match /{imageId} {
    // This rule only matches a single path segment (*)
    // imageId is a string that contains the specific segment matched
    allow read: if <condition>;
  }

  // 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 bir kural true olarak değerlendirilirse sonuç true olur.

Yukarıdaki kurallarda, "images/profilePhoto.png" dosyası aşağıdaki koşullardan herhangi biri geçerliyse condition veya other_condition doğru olarak değerlendirilirken dosya "images/users/user:12345/profileFotoğraf.png" yalnızca şunun sonucuna tabidir: other_condition.

Bir joker karakter değişkenine match sağlama dosyası içinden referans verilebilir ad veya yol yetkilendirmesi:

// Another way to restrict the name of a file
match /images/{imageId} {
  allow read: if imageId == "profilePhoto.png";
}

Cloud Storage Security Rules basamaklamaz ve kurallar yalnızca istek yolu, belirtilen kurallara sahip bir yolla eşleşiyor.

Değerlendirme iste

Yüklemeler, indirmeler, meta veri değişiklikleri ve silme işlemleri Cloud Storage alıcısına request gönderildi. request değişkeni isteğin gerçekleştirildiği dosya yolu, isteğin gerçekleştirildiği zaman değeri ve istek yazma işlemiyse yeni resource değeri kullanılır. HTTP üstbilgileri ve kimlik doğrulama durumu da dahil edilir.

request nesnesi ayrıca kullanıcının benzersiz kimliğini ve request.auth nesnesinde Firebase Authentication yükü olacak. Kimlik Doğrulama bölümünde daha ayrıntılı olarak açıklanmıştır bölümünde bulabilirsiniz.

request nesnesindeki özelliklerin tam listesini aşağıda bulabilirsiniz:

Özellik Tür Açıklama
auth eşleme<dize, dize> Kullanıcı giriş yaptığında uid, kullanıcının benzersiz kimliğini ve token, Firebase Authentication JWT hak talebinin haritası. Aksi takdirde null
params eşleme<dize, dize> İsteğin sorgu parametrelerini içeren eşleme.
path yol İsteğin yapıldığı yolu temsil eden bir path gerçekleştiriliyor.
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 zaman damgası.

Kaynak değerlendirme

Kuralları değerlendirirken dosyanın meta verilerini de değerlendirmek isteyebilirsiniz. yükleme, indirme, değiştirme veya silme işlemlerini yapabilir. Bu sayede, 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 verme gibi işlemleri yapan karmaşık ve güçlü kurallar oluşturabilirsiniz.

Cloud Storage için Firebase Security Rules, resource nesnesinde dosya meta verilerini sağlar. Bu nesne, Cloud Storage nesnesinde gösterilen meta verilerin anahtar/değer çiftlerini içerir. Bu özellikler, veri bütünlüğünü sağlamak için read veya write isteklerinde denetlenebilmektedir.

write isteklerinde (yüklemeler, meta veri güncellemeleri ve silmeler gibi), dosyanın dosya meta verilerini içeren resource nesnesine ek varsa, istek yolunda bulunan URL'leri de request.resource nesnesi içerir ve bu, oluşturulacak dosya meta verilerinin bir alt kümesini içerir yazılması gerekir. Bu iki değeri, uygulamanızın veya dosya türü ya da boyutu gibi uygulama kısıtlamaları uygulayabilirsiniz.

resource nesnesindeki özelliklerin tam listesini aşağıda bulabilirsiniz:

Özellik Tür Açıklama
name dize Nesnenin tam adı
bucket dize Bu nesnenin bulunduğu paketin adı.
generation int Google Cloud Storage nesne oluşturma.
metageneration int Google Cloud Storage nesne meta oluşturma işlemi gerçekleştirmeniz gerekir.
size int Nesnenin bayt cinsinden boyutu.
timeCreated zaman damgası Nesnenin oluşturulduğu zamanı temsil eden bir zaman damgası.
updated zaman damgası Nesnenin en son ne zaman güncellendiğini gösteren bir zaman damgası.
md5Hash dize Nesnenin MD5 karması.
crc32c dize Nesnenin crc32c karması.
etag dize Bu nesneyle ilişkilendirilen etag.
contentDisposition dize Bu nesneyle ilişkili içerik gönderme.
contentEncoding dize Bu nesneyle ilişkilendirilen içerik kodlaması.
contentLanguage dize Bu nesneyle ilişkilendirilen içerik dili.
contentType dize Bu nesneyle ilişkili içerik türü.
metadata eşleme<dize, dize> Geliştirici tarafından belirtilen ek meta verilerin anahtar/değer çiftleri.

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

Güvenlik kuralı sınırları

Güvenlik kurallarıyla çalışırken aşağıdaki sınırlara dikkat edin:

Sınır Ayrıntılar
Maksimum firestore.exists() ve İstek başına firestore.get() arama

Tek belgeli istekler ve sorgu istekleri için 2.

Bu sınırın aşılması, "izin verilmedi" hatasıyla sonuçlanır.

Aynı dokümanlara yapılan erişim çağrıları önbelleğe alınabilir ve önbelleğe alınmış aramalar sınırlara dahil edilmez.

Tam Örnek

Tüm bunları bir araya getirerek bir resim depolama çözümü için kuralların tam bir örneğini oluşturabilirsiniz:

service firebase.storage {
 match /b/{bucket}/o {
   match /images {
     // Cascade read to any image type at any path
     match /{allImages=**} {
       allow read;
     }

     // Allow write files to the path "images/*", subject to the constraints:
     // 1) File is less than 5MB
     // 2) Content type is an image
     // 3) Uploaded content type matches existing content type
     // 4) File name (stored in imageId wildcard variable) is less than 32 characters
     match /{imageId} {
       allow write: if request.resource.size < 5 * 1024 * 1024
                    && request.resource.contentType.matches('image/.*')
                    && request.resource.contentType == resource.contentType
                    && imageId.size() < 32
     }
   }
 }
}

Realtime Database

Temel yapı

Realtime Database içinde Firebase Security Rules, JSON belgesinde bulunan JavaScript benzeri ifadelerden oluşur.

Şu söz dizimini kullanırlar:

{
  "rules": {
    "<<path>>": {
    // Allow the request if the condition for each method is true.
      ".read": <<condition>>,
      ".write": <<condition>>,
      ".validate": <<condition>>
    }
  }
}

Bu kuralda üç temel öğe bulunur:

  • Yol: Veritabanı konumu. Bu, veritabanınızın JSON yapısını yansıtır.
  • İstek: Bunlar, kuralın erişim izni vermek için kullandığı yöntemlerdir. read ve write kuralları geniş kapsamlı okuma ve yazma erişimi sağlarken validate kuralları, gelen veya mevcut verilere göre erişim izni vermek için ikincil bir doğrulama görevi görür.
  • Durum: Bir isteğin doğru olarak değerlendirilmesine izin veren koşul.

Kurallar yollara nasıl uygulanır?

Realtime Database'te Rules atomik olarak uygulanır. Yani daha üst düzey üst öğe düğümlerindeki kurallar, daha ayrıntılı alt öğe düğümlerindeki kuralları geçersiz kılar ve daha derin bir düğümdeki kurallar bir üst öğe yoluna erişim izni veremez. Üst yollardan birine erişim izni verdiyseniz veritabanı yapınızdaki daha derin bir yolda erişim iznini ayrıntılandıramaz veya iptal edemezsiniz.

Aşağıdaki kuralları göz önünde bulundurun:

{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          // ignored, since read was allowed already
          ".read": false
        }
     }
  }
}

Bu güvenlik yapısı, /bar/ ürününün her zaman okunmasına izin verir. /foo/, true değerine sahip bir alt baz içeriyor. /foo/bar/ altındaki ".read": false kuralında burada geçerlidir. Çünkü erişim, alt yollar tarafından iptal edilemez.

İlk bakışta sezgilerimi kaybetmiş gibi dursa da bu, çok karmaşık erişim ayrıcalıklarının uygulanmasına olanak tanır. minimum çabayla geliştirebilirsiniz. Bu özellik, özellikle kullanıcı tabanlı güvenlik için yararlıdır.

Ancak .validate kuralları basamaklamaz. Tüm kuralları doğrula bir yazmaya izin verilmesi için hiyerarşinin tüm düzeylerinde karşılanması gerekir.

Ayrıca, kurallar üst yol için geçerli olmadığından, okuma veya yazma İstenen konumda veya üst öğede bir kural yoksa işlem başarısız olur konum verebilirsiniz. Etkilenen her alt yol erişilebilir olsa bile okuma işlemi tamamen başarısız olur. Şu yapıyı göz önünde bulundurun:

{
  "rules": {
    "records": {
      "rec1": {
        ".read": true
      },
      "rec2": {
        ".read": false
      }
    }
  }
}

Kuralların atomik olarak değerlendirildiğini anlamadan, Örneğin, /records/ yolunu getirmek rec1 sonucunu döndürür. ancak rec2 değil. Ancak asıl sonuç bir hatadır:

JavaScript
var db = firebase.database();
db.ref("records").once("value", function(snap) {
  // success method is not called
}, function(err) {
  // error callback triggered with PERMISSION_DENIED
});
Objective-C
Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
[[_ref child:@"records"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
  // success block is not called
} withCancelBlock:^(NSError * _Nonnull error) {
  // cancel block triggered with PERMISSION_DENIED
}];
Swift
Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
var ref = FIRDatabase.database().reference()
ref.child("records").observeSingleEventOfType(.Value, withBlock: { snapshot in
    // success block is not called
}, withCancelBlock: { error in
    // cancel block triggered with PERMISSION_DENIED
})
Java
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("records");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    // success method is not called
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {
    // error callback triggered with PERMISSION_DENIED
  });
});
REST
curl https://docs-examples.firebaseio.com/rest/records/
# response returns a PERMISSION_DENIED error

/records/ konumundaki okuma işlemi atomik olduğundan ve /records/ altındaki tüm verilere erişim izni veren bir okuma kuralı olmadığından bu işlem PERMISSION_DENIED hatası verir. Bu kuralı, Firebase konsolumuzdaki güvenlik simülasyon aracında değerlendirirsek okuma işleminin reddedildiğini görebiliriz:

Attempt to read /records with auth=Success(null)
    /
    /records

No .read rule allowed the operation.
Read was denied.

Hiçbir okuma kuralı /records/ yoluna erişime izin vermediği için işlem reddedildi. Ancak rec1 kuralının, istediğimiz yolda olmadığı için hiç değerlendirilmediğini unutmayın. rec1 öğesini getirmek için ona doğrudan erişmemiz gerekiyordu:

JavaScript
var db = firebase.database();
db.ref("records/rec1").once("value", function(snap) {
  // SUCCESS!
}, function(err) {
  // error callback is not called
});
Objective-C
Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
FIRDatabaseReference *ref = [[FIRDatabase database] reference];
[[ref child:@"records/rec1"] observeSingleEventOfType:FEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
    // SUCCESS!
}];
Swift
Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
var ref = FIRDatabase.database().reference()
ref.child("records/rec1").observeSingleEventOfType(.Value, withBlock: { snapshot in
    // SUCCESS!
})
Java
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("records/rec1");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    // SUCCESS!
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {
    // error callback is not called
  }
});
REST
curl https://docs-examples.firebaseio.com/rest/records/rec1
# SUCCESS!

Konum değişkeni

Realtime Database Rules, $location desteği sunuyor değişkenini yol segmentleriyle eşleştirin. Yolunuzun önünde $ ön ekini kullanın öğesini yol boyunca herhangi bir alt düğümle eşleştirin.

  {
    "rules": {
      "rooms": {
        // This rule applies to any child of /rooms/, the key for each room id
        // is stored inside $room_id variable for reference
        "$room_id": {
          "topic": {
            // The room's topic can be changed if the room id has "public" in it
            ".write": "$room_id.contains('public')"
          }
        }
      }
    }
  }

$variable parametresini sabit yolla paralel olarak da kullanabilirsiniz gösterir.

  {
    "rules": {
      "widget": {
        // a widget can have a title or color attribute
        "title": { ".validate": true },
        "color": { ".validate": true },

        // but no other child paths are allowed
        // in this case, $other means any key excluding "title" and "color"
        "$other": { ".validate": false }
      }
    }
  }