Насколько строгими должны быть правила Firestore? - PullRequest
0 голосов
/ 05 мая 2018

Могу ли я доверять данным, поступающим в Firestore, или мне нужно все проверять и абсолютно не доверять входящим данным, потому что клиент может подделать все?

Например, может ли клиент подделать uid, адрес электронной почты и отображаемое имя?

firebase.firestore().collection("users").doc(state.user.uid).collection("friendRequests").doc(payload.uid).set({
  uid: payload.uid,
  email: payload.email,
  displayName: payload.displayName
});

Правила хранения в огне:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
    }
    match /users/{userId} {
        allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }
    match /users/{userId}/friendRequests/{friendId} {
      allow create: if userId == request.auth.uid
      && friendId != request.auth.uid
      && !exists(/databases/$(database)/documents/users/$(request.auth.uid)/friends/$(friendId))
      && !exists(/databases/$(database)/documents/users/$(request.auth.uid)/friendRequests/$(friendId))
      && !exists(/databases/$(database)/documents/users/$(friendId)/friends/$(request.auth.uid))
      && !exists(/databases/$(database)/documents/users/$(friendId)/friendRequests/$(request.auth.uid));
    }
  }
}

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

1 Ответ

0 голосов
/ 05 мая 2018

request.auth в ваших правилах безопасности заполняется Аутентификацией Firebase. Это означает, что пользователь, запускающий правила, должен войти в систему с помощью Firebase Authentication и что профиль в request.auth принадлежит тому пользователю, который вошел в систему.

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

Конечно, при использовании социального провайдера (Facebook, Github, Google и т. Д.) Пользователи могут устанавливать любое отображаемое имя по своему усмотрению. Таким образом, вы обычно не должны зависеть от того, что это действительно, кроме того, чтобы использовать его для отображения имени для каждого пользователя.

...