Как любой пользователь может безопасно писать в мою базу данных в Firebase без аутентификации? - PullRequest
0 голосов
/ 23 апреля 2020

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

Дело в том, что моя база данных в реальном времени просто полагается на ключ транзакции Stripe (то есть кто-то заплатил за элемент), чтобы иметь возможность записи в БД, потому что мои правила установлены так, что любой может писать, в противном случае мне нужно, чтобы каждый пользователь входил в систему. , но это не то, что я хочу.

Firebase недавно уведомил меня, что мои правила слабые.

Как может убедиться, что мои пользователи могут безопасно и безопасно писать в мою базу данных для моего приложения без входа в систему / Auth?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

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

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

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

В большинстве своем c способ, которым вы будете структурировать правила безопасности для неуязвимых URL, что-то вроде:

{
  "rules": {
    "transactions": {
      "$key": {
        ".read": true,
        ".write": true
      }
    }
  }
}

Это позволяет пользователям читать / записывать определенные c узлы, например, transactions/abc123xyzunguessable, но , что важно , не разрешает чтение / запись в родительский узел transactions , Безопасность обусловлена ​​тем фактом, что только человек, который изначально получил неузнаваемый токен, сможет предоставить его снова в будущем.

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

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

0 голосов
/ 23 апреля 2020

Не существует «безопасного» способа разрешить запись в базу данных реального времени без проверки подлинности Firebase. Без Firebase Auth либо есть полный доступ publi c, либо вообще нет publi c доступа.

Если вы не можете использовать Firebase Auth, вместо этого вам нужно будет сделать make ваши правила безопасности запрещают любой прямой доступ к базе данных из клиентских приложений, а затем создают бэкэнд-API для управления доступом к базе данных. Ваши внутренние API должны как-то подтвердить, что лицо, делающее запрос, должно иметь возможность вносить необходимые изменения. Затем ему нужно будет использовать Firebase Admin SDK для фиксации этих изменений в базе данных.

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