Güvenli olmayan kurallardan kaçınma

Firebase Security RulesYapılandırmalarındaki yaygın güvenlik açıklarını anlamak, kendi kurallarınızı inceleyip daha güvenli hale getirmek ve değişikliklerinizi dağıtmadan önce test etmek için bu kılavuzu kullanın.

Verilerinizin yeterince güvenli olmadığına dair bir uyarı alırsanız sık yapılan bu hataları inceleyin ve güvenlik açığı olan kuralları güncelleyin.

Firebase Security Rules erişin

Mevcut Rules öğenizi görüntülemek için Firebase KSA'yı veya Firebase konsolu. Kurallarınızı aynı yöntemi kullanarak düzenlediğinizden emin olun. kullanın. Emin değilseniz Yerel olarak tanımlanan kurallarınızın en son güncellemeleri yansıtıp yansıtmadığı konsolu her zaman Firebase Security Rules uygulamanızın en son dağıtılan sürümünü gösterir.

Kurallarınıza Firebase konsolundan erişmek için ve ardından Realtime Database, Cloud Firestore veya Depolama. Doğru veritabanına veya depolama alanına ulaştığınızda Kurallar'ı tıklayın paket.

Kurallarınıza Firebase CLI'den erişmek için firebase.json dosyanızda belirtilen kurallar dosyasına gidin.

Firebase Security Rules hakkında bilgi edinme

Firebase Security Rules verilerinizi kötü amaçlı kullanıcılara karşı korur. Firebase konsolunda bir veritabanı örneği veya Cloud Storage paketi oluşturduğunuzda tüm kullanıcılara erişimi reddedebilir (Kilitli mod) veya tüm kullanıcılara erişim izni verebilirsiniz (Test modu). Modelleme sırasında daha açık bir yapılandırma sağlamak için, zaman ayırıp kurallarınızı ve düzenlemelerinizi doğru uygulamanızı dağıtmadan önce verilerinizin güvenliğini sağlayın.

Uygulamanızı geliştirirken ve kurallarınız için farklı yapılandırmaları test ederken uygulamanızı yerel bir geliştirme ortamında çalıştırmak için yerel Firebase emülatörlerinden birini kullanın.

Güvenli olmayan kurallarla ilgili yaygın senaryolar

Varsayılan olarak veya uygulamanızı geliştirmeye başladığınızda ayarlamış olabileceğiniz Rules, uygulamanızı dağıtmadan önce incelenip güncellenmelidir. Aşağıdaki yaygın hatalardan kaçınarak kullanıcılarınızın verilerini gerektiği gibi koruduğunuzdan emin olun.

Açık erişim

Firebase projenizi ayarlarken kurallarınızı geliştirme sırasında herkese açık erişime izin verecek şekilde ayarlamış olabilirsiniz. Kendinizi muhtemelen ancak dağıttıysanız internette mevcuttur. Google güvenlik kurallarını yapılandırdıktan sonra da tahminde bulunan herkes verileri çalabilir, değiştirebilir veya silebilir.

Önerilmez: Tüm kullanıcılar için okuma ve yazma erişimi.

Cloud Firestore

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this ruleset in production; it allows
// anyone to overwrite your entire database.

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

Realtime Database

{
  // Allow read/write access to all users under any conditions
  // Warning: **NEVER** use this ruleset in production; it allows
  // anyone to overwrite your entire database.

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

Cloud Storage

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with App Engine, this will also make
// files uploaded via App Engine public.
// Warning: This rule makes every file in your Cloud Storage bucket accessible to any user.
// Apply caution before using it in production, since it means anyone
// can overwrite all your files.

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}
    
Çözüm: Okuma ve veri işlemeyi kısıtlayan kurallar yazma erişimi.

Veri hiyerarşiniz için anlamlı kurallar oluşturun. Bu güvensizliğin yaygın çözümlerinden biri, Firebase Authentication ile kullanıcıya dayalı güvenliktir. Daha fazla bilgi edinin kurallarla kullanıcı kimliklerini doğrulama hakkında

Cloud Firestore

Realtime Database

Cloud Storage

Kimliği doğrulanmış tüm kullanıcılar için erişim

Bazen Rules, kullanıcının oturum açtığını kontrol eder ancak bu kimlik doğrulamasına göre erişimi daha fazla kısıtlamaz. Kurallarınızdan biri auth != null, giriş yapan tüm kullanıcıların dışı verilerdir.

Önerilmez: Giriş yapmış tüm kullanıcılar şunu okudu: ve veritabanınızın tamamına yazma erişimi sağlayın.

Cloud Firestore

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

Realtime Database

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

Cloud Storage

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
Çözüm: Güvenliği kullanarak erişimi daraltın koşullar.

Kimlik doğrulamayı kontrol ederken, belirli veri kümeleri için belirli kullanıcılara erişimi daha da kısıtlamak amacıyla kimlik doğrulama özelliklerinden birini de kullanabilirsiniz. Farklı gezinme seçenekleri hakkında daha fazla bilgi kimlik doğrulama özelliklerini kullananlar için de geçerlidir.

Cloud Firestore

Realtime Database

Cloud Storage

(Realtime Database) Yanlış devralınan kurallar

Daha yüzeysel kurallarda kuralların geçersiz kılındığı Realtime Database Security Rules basamaklama alt düğümlerde daha iyi kontrol edebilirsiniz. Alt düğümde bir kural yazarken, yalnızca ek ayrıcalıklar tanıyabileceğini unutmayın. Hassaslaştırılamaz veya iptal edilemez verilere erişmenize olanak tanır.

Önerilmez: Alt yollarda kuralları hassaslaştırma
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Çözüm: Üst yollarda geniş kapsamlı kurallar yazın ve alt yollarda daha spesifik ayrıcalıklar verin. Veri erişimi ihtiyaçlarınız daha fazla ayrıntı gerektiriyorsa kurallarınızı ayrıntılı tutun. Realtime Database Security Rules içinde basamaklama hakkında daha fazla bilgi edinin. Çekirdek Realtime Database Security Rules söz dizimi.

Kapalı erişim

Uygulamanızı geliştirirken yaygın olarak kullanılan bir diğer yaklaşım da ve verileri kilitlenebilir. Bu genellikle, tüm kullanıcıların okuma ve yazma erişimini aşağıdaki gibi kapattığınız anlamına gelir:

Cloud Firestore

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

Realtime Database

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

Cloud Storage

// Access to files through Cloud Storage is completely disallowed.
// Files may still be accessible through App Engine or Google Cloud Storage APIs.

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

Firebase Admin SDK'ları ve Cloud Functions, veritabanınıza erişmeye devam edebilir. Cloud Firestore veya Yalnızca sunucu olarak Realtime Database Firebase ile bağlantılı arka uç Yönetici SDK'si. Güvenli olsa da uygulamanızın istemcilerinin verileri doğru şekilde alıp alamadığını test etmeniz gerekir.

Cloud Firestore Security Rules ve işleyiş şekli hakkında daha fazla bilgiyi Cloud Firestore Security Rules'ü kullanmaya başlama başlıklı makalede bulabilirsiniz.

Cloud Firestore Security Rules

Uygulamanızın davranışını kontrol etmek ve Cloud Firestore Security Rules yapılandırmalarınızı doğrulamak için Firebase Emulator'ı kullanın. Cloud Firestore kullanın dağıtmadan önce birim testlerini yerel ortamda çalıştırıp otomatikleştirmek için emülatör tıklayın.

Firebase konsolunda Firebase Security Rules'ü hızlıca doğrulamak için Firebase Kural Simülasyon Aracı'nı kullanın.