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

Избегайте небезопасных правил

Используйте это руководство, чтобы понять распространенные уязвимости в конфигурациях правил безопасности Firebase, изучить и лучше защитить свои собственные правила, а также протестировать свои изменения перед их развертыванием.

Если вы получили предупреждение о том, что ваши данные не защищены должным образом, просмотрите эти часто возникающие ошибки и обновите все уязвимые правила.

Получите доступ к своим правилам безопасности Firebase

Чтобы просмотреть существующие правила, используйте интерфейс командной строки Firebase или консоль Firebase. Убедитесь, что вы редактируете свои правила, используя один и тот же метод, последовательно, чтобы избежать ошибочной перезаписи обновлений. Если вы не уверены, отражают ли ваши локально определенные правила самые последние обновления, в консоли Firebase всегда отображается последняя развернутая версия ваших правил безопасности Firebase.

Чтобы получить доступ к правилам из Firebase консоли , выберите проект, затем перейдите в реальном времени базы данных, облачных Firestore или хранения. Нажмите Правила , как только вы находитесь в правильном ведре базы данных или хранения.

Чтобы получить доступ к правилам из Firebase CLI, перейдите в файл правил отмечен в вашем файле firebase.json .

Понять правила безопасности Firebase

Правила безопасности Firebase защищают ваши данные от злонамеренных пользователей. При создании экземпляра базы данных или ведро Cloud Storage в консоли Firebase, вы можете выбрать либо запретить доступ ко всем пользователям (Locked режим) или предоставить доступ всем пользователям (режим Test). Хотя вам может потребоваться более открытая конфигурация во время разработки, убедитесь, что вы нашли время, чтобы правильно настроить свои правила и защитить свои данные перед развертыванием приложения.

Как вы разрабатываете приложение и тестирование различных конфигураций для ваших правил, использование один из местных эмуляторов Firebase запустить приложение в локальной среде разработки.

Распространенные сценарии с небезопасными правилами

Правила, которые вы могли установить по умолчанию или когда вы изначально работали над разработкой приложения, должны быть пересмотрены и обновлены перед развертыванием приложения. Убедитесь, что вы должным образом защищаете данные своих пользователей, избегая следующих распространенных ошибок.

Открытый доступ

При настройке проекта Firebase вы могли установить правила, разрешающие открытый доступ во время разработки. Вы можете подумать, что ваше приложение использует только вы, но если вы его развернули, оно доступно в Интернете. Если вы не аутентифицируете пользователей и не настраиваете правила безопасности, то любой, кто угадает ваш идентификатор проекта, может украсть, изменить или удалить данные.

Не рекомендуется: Чтение и запись доступ для всех пользователей.

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

База данных в реальном времени

{
  // 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
  }
}
    

Облачное хранилище

// 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;
    }
  }
}
    
Решение: Правила , которые ограничивают доступ для чтения и записи.

Создавайте правила, которые имеют смысл для вашей иерархии данных. Одним из распространенных решений этой незащищенности является безопасность на уровне пользователей с помощью Firebase Authentication. Подробнее об аутентификации пользователей с правилами .

Cloud Firestore

База данных в реальном времени

Облачное хранилище

Доступ для любого аутентифицированного пользователя

Иногда правила проверяют, что пользователь вошел в систему, но не ограничивают доступ на основе этой аутентификации. Если один из ваших правил включает в себя auth != null , убедитесь , что вы хотите любой зарегистрированный пользователь , чтобы получить доступ к данным.

Не рекомендуется: Любая вошедший пользователь имеет доступ на чтение и записи для всей базы данных.

Cloud Firestore

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

База данных в реальном времени

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

Облачное хранилище

// 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;
    }
  }
}
Решение: Узкий доступ с использованием условий безопасности.

Когда вы проверяете аутентификацию, вы также можете использовать одно из свойств аутентификации, чтобы дополнительно ограничить доступ для определенных пользователей к определенным наборам данных. Узнайте больше о различных свойствах аутентификации .

Cloud Firestore

База данных в реальном времени

Облачное хранилище

(База данных реального времени) Неправильно унаследованные правила

Правила базы данных в реальном времени каскадируются, причем правила на более мелких, родительских путях переопределяют правила на более глубоких дочерних узлах. Когда вы пишете правило для дочернего узла, помните, что оно может предоставлять только дополнительные привилегии. Вы не можете уточнить или отозвать доступ к данным на более глубоком пути в вашей базе данных.

Не рекомендуется: правила переработки на детях путях
{
  "rules": {
     "foo": {
        // allows read to /foo/*
        ".read": "data.child('baz').val() === true",
        "bar": {
          /* ignored, since read was allowed already */
          ".read": false
        }
     }
  }
}
Решение: Запись правила на родительских путях , которые являются широкими, и предоставляют более конкретные привилегии на дочерних путях Если ваши потребности доступа к данным требуются больше зернистости, держать правили зернистый. Узнайте больше о каскадных Realtime базы данных правил в безопасности данных .

Закрытый доступ

Другой распространенный подход - пока вы разрабатываете свое приложение, - заблокируйте свои данные. Обычно это означает, что вы закрыли доступ для чтения и записи для всех пользователей следующим образом:

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

База данных в реальном времени

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

Облачное хранилище

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

SDK администратора Firebase и облачные функции по-прежнему могут получить доступ к вашей базе данных. Используйте эти правила, если вы намереваетесь использовать Cloud Firestore или Realtime Database в качестве серверной части только в сочетании с Firebase Admin SDK. Хотя это безопасно, вы должны проверить, могут ли клиенты вашего приложения правильно извлекать данные.

Узнайте больше о облачных правилах безопасности Firestore и как они работают в НАЧАТЬ с Cloud правил безопасности Firestore .

Проверьте свои правила безопасности Cloud Firestore

Для того, чтобы проверить поведение вашего приложения и проверить свои конфигурации Облако Firestore правила безопасности, используйте Firebase Emulator . Используйте эмулятор Cloud Firestore для запуска и автоматизации модульных тестов в локальной среде перед развертыванием любых изменений.

Чтобы быстро проверить Firebase Правила безопасности в Firebase консоли, используйте Firebase Rules Simulator .