Как предотвратить атаки на функции firebase? - PullRequest
1 голос
/ 25 апреля 2020

Я вижу очень необычный трафик c в моих облачных функциях, и я могу отнести их только к атаке (обратите внимание, что я использую бесплатный план Spark).

Облачная функция, которая получает спам is:

exports.onPlayerSolvedPuzzle = functions.database.ref('/U/{userId}/CP/{puzzleId}/S')
.onCreate((snapshot, context) => 
{
...

Как видно, он предназначен для вызова при добавлении новых данных в мою БД по пути / U / {userId} / CP / {puzzleId} / S

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

{
  "rules": 
  {
    "U":
    {
      "$user_id":
      {
        ".read" : false,
        ".write": "auth.uid != null && $user_id === auth.uid",
        "CP":
        {
          "$puzzle_id":
          {
            "S":
            {
              ".validate": "!data.exists()"
            },
...

Наконец, я включил только "Играть в игры" »и« Game Center », поэтому для изменения моей БД нельзя использовать анонимную учетную запись или учетную запись электронной почты / пароля.

Когда происходят атаки, максимальное количество одновременных подключений к моей БД увеличивается от 20 до 100, а количество обращений к облачным функциям возрастает с 1000 или менее в день до 20000 или более в день, что немного истощает мою месячную квоту использования.

Что я должен сделать, чтобы защитить облако Вызовы функций d, которые я еще не сделал?

PS: когда «onPlayerSolvedPuzzle» выполняет, он записывает в другую часть БД, чтобы увеличить число людей, которые решили головоломку с помощью этого «puzzle_id» (или создать запись, если ее не было). У меня есть код, чтобы увидеть, есть ли в этой части БД записи, связанные с 'puzzle_id', которые не должны существовать (я знаю puzzle_id всех головоломок). Когда я запускаю этот код, я вообще не вижу никаких проблем, поэтому я считаю, что функция не вызывается со случайным головоломки_ид в пути.

1 Ответ

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

Несколько вещей, которые нужно знать:

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

  • Правила безопасности не применяются к бэкэнд-коду, который использует Admin SDK.

  • Если вы наблюдаете за тем, что кажется оскорбительным трафиком c, вы должны обратиться к Поддержка Firebase напрямую, чтобы сообщить об этом.

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