Достаточно ли анонимной аутентификации?

#firebase #google-cloud-firestore #firebase-authentication

#огневая база #google-облако-firestore #firebase-аутентификация #firebase-безопасность

Вопрос:

Я разрабатываю приложение, которое не требует входа в систему, потому что в нем нет никаких пользовательских данных. Мой первоначальный план состоял в том, чтобы просто сделать всю мою базу данных доступной только для чтения. Однако, проведя некоторые исследования, я обнаружил, что эти правила безопасности сделают мою базу данных очень уязвимой. Мой новый план состоит в том, чтобы внедрить анонимную аутентификацию для каждого нового пользователя, который открывает мое приложение, а затем удалить этого пользователя, как только он выйдет из моего приложения. Правило безопасности будет заключаться только в том, чтобы разрешить чтение, если пользователь аутентифицирован. Достаточно ли этого, чтобы помешать кому-либо использовать некорректные запросы к моей базе данных?

Ответ №1:

Как правило, нет.

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

Предполагая, что мы начинаем с этих простых правил:

 // Allow read access on all documents to any user signed in to the application,
// and write access to only administrators
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if request.auth.uid != null;
      allow write: if request.auth.token.isAdmin === true;
    }
  }
}
  

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

 // Allow read access on all documents at /posts/{postId} to any user signed in to the application,
// and write access to only administrators
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{postId} {
      allow read: if request.auth.uid != null;
      allow write: if request.auth.token.isAdmin === true;
    }
  }
}
  

или даже

 // Allow read access on all documents at /posts/{postId} to any user signed in to the application,
// and write access to only administrators
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{postId} {
      allow read: if request.auth.uid != null;
      allow write: if request.auth.token.isAdmin === true;

      // allow same permissions on subcollections of /posts/{postId}
      match /{document=**} {
        allow read: if request.auth.uid != null;
        allow write: if request.auth.token.isAdmin === true;
      }
    }
  }
}
  

Далее вам следует рассмотреть возможность добавления правил, ограничивающих размер запросов, выполняемых к вашей базе данных, с использованием подробного правила безопасности list , как описано в Securely query data документации Firebase .

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

      // Deny any query not limited to 10 or fewer documents
      allow list: if request.auth != null
                  amp;amp; request.query.limit <= 10;

      // Anyone can retrieve an individual post
      allow get: if request.auth != null;

      // Only an admin can write to posts
      allow write: if request.auth.token.isAdmin === true;
    }
  }
}
  

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