Ограничение облачного магазина Firestore определенным доменом

# #security #web #google-cloud-firestore #authorization #firebase-security

Вопрос:

Есть ли способ ограничить Cloud Firestore (для хостинга/интернета) для выполнения операций CRUD с ограничениями, скажем, только для одного домена xyz.com ?

Например, приведенное ниже правило блокирует read, update, delete без авторизации, но вы все равно write можете подключиться к базе данных.

 service cloud.firestore {
  match /databases/{database}/documents {
    match /coming-soon-email-ids/{document=**} {
      allow write;
      allow read, update, delete: if request.auth.uid == !null;
    }
  }
}
 

Или мне нужно интегрировать в него брандмауэр Google?

Комментарии:

1. зацени это blog.jimmycai.com/p/firebase-limit-access-to-certain-domains . Не совсем ограничение домена, но для входа в систему Google вы можете ограничить определенный домен для G suit

Ответ №1:

Правила безопасности Firebase не могут ограничить доступ к веб-домену. В самом общем смысле это невозможно, потому что Firestore предназначен для доступа к мобильным клиентам по всему миру с использованием Интернета, Android и iOS. Клиенты Android и iOS никогда не появляются из какого-либо домена. Они просто получают прямой доступ к базе данных через предоставленную клиентскую библиотеку или иногда через API REST Firestore. Веб-клиенты могут даже подделать свой кажущийся домен (который на самом деле доступен только с помощью небезопасного заголовка «Реферер» в HTTP-запросе).

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

Комментарии:

1. Хорошо, есть ли способ ограничить одно или несколько полей?

2. Я не знаю, о чем ты просишь. Это звучит как начало совершенно нового вопроса, не связанного с этим.

3. Если вы вошли в систему через Google (например, G suit) Я думаю, что мы просто проверяем домен электронной почты в правилах firestore

4. Не могу использовать apiKey для создания собственного приложения, которое указывает на ваш firestore, а затем также реализовать анонимный вход?

Ответ №2:

У меня был тот же вопрос, и я нашел решение. Вы можете выполнить вход анонимно:

 const signIn = async () => {
auth.signInAnonymously()
.then(() => {
  // Signed in..
})
.catch((error) => {
  var errorCode = error.code;
  var errorMessage = error.message;
  // ...
});
 

Тогда вы можете сформулировать свои правила следующим образом:

 allow read, write: if request.auth != null;
 

Затем при аутентификации вы можете активировать анонимный метод входа в систему и добавить свои авторизованные домены.

Комментарии:

1. Вы это проверяли? Я попытался анонимно аутентифицироваться с домена, не указанного в списке, и все еще могу получать данные из Firestore…

2. Я проверил это и использовал. Не забудьте добавить правила в правила firestore, а также добавить домен, который вы хотите разрешить

3. Мешает ли вам войти в систему анонимно с помощью определенной учетной записи?

4. Я думаю, что у вас могут быть обе системы