Достаточно ли анонимной аутентификации? - PullRequest
0 голосов
/ 10 марта 2020

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

1 Ответ

1 голос
/ 10 марта 2020

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

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

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

// 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
                  && 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 Storage или вы можете даже обслуживать данные с Firebase Hosting, где они могут обслуживаться CDN вместо вашего приложения. * 102 3 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...