diff --git a/tradein-mvp/backend/app/core/config.py b/tradein-mvp/backend/app/core/config.py index f3588104..981eda1f 100644 --- a/tradein-mvp/backend/app/core/config.py +++ b/tradein-mvp/backend/app/core/config.py @@ -105,7 +105,16 @@ class Settings(BaseSettings): auth_mode: Literal["dual", "db_only"] = Field(default="dual", validation_alias="AUTH_MODE") # Rate-limit на /login: не более login_rate_limit попыток за # login_rate_limit_window_s секунд на ключ (обычно IP или username). - login_rate_limit: int = Field(default=5, validation_alias="LOGIN_RATE_LIMIT") + # + # 27.08: было 5. Пилот «Практика» — ОФИС, все сотрудники выходят из-под + # одного NAT, то есть пять попыток делились на всю компанию сразу. Хватило + # одного человека, перепутавшего пароль, чтобы запереть остальных: «Слишком + # много попыток» получали те, кто вообще ещё не пробовал войти. + # + # Защита от перебора при этом не ослабевает: настоящий предохранитель — + # login_username_fail_threshold (счёт по ЛОГИНУ, 20 за час), и он не тронут. + # Лимит по адресу нужен против всплеска с одной машины, а не против офиса. + login_rate_limit: int = Field(default=20, validation_alias="LOGIN_RATE_LIMIT") login_rate_limit_window_s: int = Field( default=300, validation_alias="LOGIN_RATE_LIMIT_WINDOW_S" )