#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 вместо вашего приложения.