#firebase #firebase-realtime-database #google-cloud-firestore #firebase-security #rules
#firebase #firebase-realtime-database #google-cloud-firestore #firebase-безопасность #Правила
Вопрос:
Привет, у меня есть проект Firebase, и когда я создаю базы данных, я создаю некоторые правила для тестирования. Теперь срок их действия истекает, и они закрывают мой проект. Я впервые работаю с проектами Firebase, и у меня нет опыта. Я покажу вам, как я определил правила как для облачного Firestore, так и для базы данных реального времени. Проект представляет собой приложение, в котором пользователи могут регистрироваться и оставлять свои комментарии. Как я должен настроить правила для обеспечения безопасности моих баз данных? Как я должен написать свой код правил? Я отсутствовал в своем проекте несколько дней, и мне написали из Google, который закрывает мой проект через два дня. Я искал информацию, но я не знаю, как создать правила, чтобы они были правильными, и мой проект также работал
Я РЕДАКТИРУЮ СВОЙ ВОПРОС, чтобы добавить детали
В моем приложении я хочу, чтобы только зарегистрированные пользователи могли писать комментарии.
Предупреждение, которое показывает мне Firebase, выглядит следующим образом:
«Его правила безопасности определены как общедоступные, поэтому любой может украсть, изменить или удалить данные из его базы данных».
Базы данных пусты, поэтому записей пока нет.
Вы можете мне помочь? Firebase закроет мой проект, если я не напишу правила правильно, правила не должны быть общедоступными.
Я прочитал документацию, которую предлагает Firebase, но я не совсем понимаю, как создавать свои правила.
Они показывают что-то вроде этого для пользователей, прошедших проверку подлинности:
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
И, с другой стороны, они показывают эти правила:
**// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}**
Я не знаю, какой из них я должен точно использовать, и как я должен их написать, чтобы в моем приложении React Native пользователи могли оставлять отзывы.
Вы можете мне помочь?
Я показываю код правил моих баз данных
//REALTIME DATABASE
{
"rules": {
".read": true,
".write": true
}
}
//CLOUD FIRESTORE
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// This rule allows anyone with your database reference to view, edit,
// and delete all data in your Firestore database. It is useful for getting
// started, but it is configured to expire after 30 days because it
// leaves your app open to attackers. At that time, all client
// requests to your Firestore database will be denied.
//
// Make sure to write security rules for your app before that time, or else
// all client requests to your Firestore database will be denied until you Update
// your rules
match /{document=**} {
allow read, write: if request.time < timestamp.date(2020, 9, 2);
}
}
}
Комментарии:
1. Мы не сможем вам помочь, если вы не предоставите более подробную информацию о том, как структурирована ваша база данных (Firestore или Databaqse в реальном времени, кстати?) и какие права доступа вы хотите реализовать («приложение, в котором пользователи могут регистрироваться и оставлять свои комментарии» слишком расплывчато)?
2. Спасибо @RenaudTarnec , я отредактирую вопрос. Я просто хочу, чтобы пользователи, зарегистрированные в приложении, выполняли запись в базу данных. база данных по-прежнему пуста
3. Пожалуйста, ознакомьтесь с решениями, представленными ниже, и, пожалуйста, сообщите нам, работают ли они для вас или нет, чтобы посмотреть дальше.
4. Продолжайте писать Спасибо за вашу поддержку @NibrassH , На данный момент это у меня не работает
5. Я опубликовал ответ ниже, пожалуйста, ознакомьтесь с ним и дайте мне знать, работает ли он для вас. Спасибо.
Ответ №1:
Вы можете использовать следующее правило, в котором только аутентифицированные пользователи могут выполнять запись и чтение в базу данных.
Для облачного Firestore:
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Для базы данных реального времени:
// Only authenticated users can access/write data
{
“rules”: {
“.read”: “auth != null”,
“.write”: “auth != null”
}
}
Комментарии:
1. Спасибо, я изменил их на те, которые вы указали, но вы увидите, что они изменились только по сравнению с моими (^). Если это сработает, я приму ваш ответ как хороший @NibrassH
2. У меня вопрос, это правила облачного Firestore или это правила базы данных реального времени? Спасибо @NibrassN
3. Нет, они предназначены для Cloud Firestore, я обновил ответ, добавив также для баз данных реального времени. Спасибо.
Ответ №2:
Исходя из опыта, есть два основных способа защиты ваших данных:
- Установите в документе поле, такое как «Идентификатор пользователя», и разрешайте CRUD только при авторизации.значение uid соответствует этому полю.
- Используйте характер сбора документов в cloud firestore и напишите правило, в котором вы разрешаете пользователю использовать всю свою собственную коллекцию. Например.
match /users/{userID}{
allow read: if request.auth.uid ==userID;
allow write: if request.auth.uid == userID;
match /userDocs/{docID}{
allow read: if request.auth.uid == userID;
allow write: if request.auth.uid == userID;
}
}
Комментарии:
1. Спасибо за вашу поддержку @CRUD DS . , должен ли я написать правила так, как вы мне показываете?
2. @MiguelEspeso Я не могу дать совет по этому поводу, поскольку это зависит от требований вашего проекта. Пожалуйста, используйте эти два метода и поэкспериментируйте. Вы можете это сделать!
Ответ №3:
В идеале вам нужно разрешить доступ к ресурсу только аутентифицированным пользователям. Из вашего кода выше
{
"rules": {
".read": true,
".write": true
}
}
Вышесказанное позволит любому пользователю читать и записывать в базу данных, даже пользователям, не прошедшим проверку подлинности.
для firestore, как вы можете видеть, в правилах указано, что он должен разрешать чтение и запись с полными привилегиями в cloud firestore только в том случае, если не прошла дата (2020,9,2)
ПЕРЕЙДИТЕ по ссылке, чтобы узнать больше о правилах базы данных firebase
и посетите
чтобы узнать о правилах firestore
Вы можете использовать аутентификацию firebase для своих пользователей, тогда, если они аутентифицированы, они могут получить доступ к базе данных.