Короткие одноразовые коды больше нельзя угадать без ограничений

FixSecurityService
Порезанный
17 сентября 2026 г. в 04:48 UTC
Автор
Kamo
Обещать
357d3a0

Каждый короткий код на платформе отправлял сообщения или тексты без подсчета: - POST/api/recover/email/verify-code взял 8-hex-character reset code ALONE и сопоставил его с каждым Выдающийся сброс счета, на 30 минут. Матч на любой учетной записи стал сеансом восстановления для этой учетной записи. - POST/api/recover/sms/verify: 6-значный текстовый код для известного числа, 10 минут, без счета. - POST/api/recover/questions/verify и /seed/verify: ответы на вопросы безопасности (цвет, город) и семенные фразы, без учета. - POST/api/security/verify-email {userId, code}: 6-значный код, 24 часа, без сеанса. Первый успех чеканит автоматический вход в аккаунт. - POST /api/account/phone/verify: 6-значный код, подтверждающий новый номер телефона восстановления, без счета. - У POST **************** был предел пяти попыток, который никогда не вступал в силу. Он написал графу а затем бросил, правило по умолчанию @Transactional перевернуло запись, и собственная транзакция контроллера была Только с откатом. CodeAttemptLimiter (Redis, фиксированные окна, подсчитанные ДО сравнения, поэтому параллельные догадки не могут пройти мимо него): - 5 попыток в час по теме: аккаунт, набранный адрес, номер телефона или код. Попытка, которая использует пятый расходует код (сбрасывает строки, помеченные использованными, текстовые коды потребляются, регистрационные коды недействительны, Потребляемый код смены телефона. Успех проясняет тему. 30 попыток в час на каждый публичный адрес клиента во всех этих конечных точках. Частные прыжки пропускаются, так как Один прокси-адрес будет стоять для всех. - 50 попыток сброса кода за 10 минут, по всей платформе. Отказ составляет 429 с Retry-After и retryAfterSeconds в организме. Ограничитель не открывается при отключении Redis, как LoginThrottleService и VerificationResendRateLimiter. Все сравнения теперь являются постоянными. Код сброса связан с учетной записью, когда запрос именует одну: проверочный код принимает «электронную почту» (адрес, набранный на Страница сброса, устраняет способ /email/initiate устраняет его) и проверяет только сброс учетной записи. Неизвестный Адрес считается точно так же, как известный. Форма только кода по-прежнему работает для страницы входа, которая не была развернута. Тем не менее (kamo-login отправляет адрес в том же наборе изменений) в рамках общего бюджета платформы. Методы написания неправильного кода теперь объявляют noRollbackFor. Коды восстановления MFA уже отставали LoginThrottleGate — 60 бит. Проверка телефонов Vonage обеспечивает собственный лимит попыток. Испытания: CodeAttemptLimiterTest: окна, пятое помечено последним, адрес и бюджет платформы, хешированные ключи, отказоустойчивые. - RecoveryCodeAttemptsTest: привязка аккаунта, трата на пятый, отказ после, неизвестный адрес подсчитано, только код Все еще работает и заканчивается, SMS, ответы на вопросы безопасности. ********************** - CodeAttemptWritesCommitTest: каждый метод через реальную ТранзакциюПерехватчик совершает свой отказ. RecoveryAttemptsWireTest: адрес и IP-адрес службы; 429 отображение на всех трех контроллерах. Двенадцать мутантов (каждый лимит, расход, привязка, бюджет и noRollbackFor удалены) не проходят тест.

Все изменения

Как вы видите судоходство?

Все это приходит в ваше рабочее пространство самостоятельно. Начните с бесплатного плана и прочитайте эту страницу через месяц.

Начните бесплатно навсегдаПосмотреть цены