Я вижу очень необычный трафик 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 всех головоломок). Когда я запускаю этот код, я вообще не вижу никаких проблем, поэтому я считаю, что функция не вызывается со случайным головоломки_ид в пути.