Согласно 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 ), и вы уверены в этом, сохраняете все попытки входа в систему во вложенных массив также может быть рассмотрен, потому что предел массива довольно велик.