Целесообразно ли сохранять метки времени для каждого входа в массив mongodb, используя mon goose? - PullRequest
0 голосов
/ 07 марта 2020

Я хочу сохранить метку времени для каждого входа в массив в mongodb, используя mon goose. Поэтому мой вопрос вызовет ли это проблему в будущем, так как размер массива будет увеличиваться со временем. Мне нужно ваше предложение, какой подход я должен использовать, чтобы сохранить метку времени входа в систему для каждой попытки входа в систему в mongodb, используя mon goose. Благодарю вас.

1 Ответ

0 голосов
/ 07 марта 2020

Согласно MongoDB Limits and Thresholds :

Максимальный размер документа BSON составляет 16 мегабайт .

А as Типы BSON состояния:

BSON имеет специальный тип метки времени для внутреннего использования MongoDB и не связан с обычным типом Date. Этот тип внутренней метки времени представляет собой 64 бит значение

Давайте сделаем некоторые вычисления здесь:

16 MB = 1.28e+8 Bit = 64 Bit * 2e+6

Теоретически, максимальная длина массива меток времени, которая может в MongoDB хранится около 2 000 000 документов.

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

Если обычный пользователь входит в систему десять раз в день в течение десяти лет размер массива будет:

10 * 365 * 10 = 36,500

, что очень мало для теоретического предела, и MongoDB может справиться с ним без проблем.

Предположим, злоумышленник отправил логин запрос 10000 раз в секунду.

2,000,000(s) / 10,000 = 200(s) < 4(min)

Размер вашего документа превысит лимит размера менее чем за несколько минут. После этого обновление документа завершится неудачно, и учетную запись больше нельзя будет использовать. Другими словами, этот подход очень уязвим для атак DDoS и Brutal. Ваша база данных будет полна ненужных данных.

Предложение:

  • Установите ограничение на размер массива. Другими словами, сохраняйте только последние 10 (или более, если не тысячи) попыток входа в систему. Если вы хотите отслеживать попытки неудачного входа в систему, просто подсчитайте число неудачных попыток, а если число превышает пороговое значение, сделайте что-нибудь праведное.
  • Если вам действительно нужно сохранить все попытки входа в систему, рассмотрите возможность создания новой коллекции, в которой будут храниться все попытки входа Тем не менее, вы также можете установить некоторые ограничения на это.
  • Если ваш сервер может правильно обрабатывать ограничения скорости ( 429 ), и вы уверены в этом, сохраняете все попытки входа в систему во вложенных массив также может быть рассмотрен, потому что предел массива довольно велик.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...