Админка: защита от перебора пароля и правка дефолта SETTINGS_FILE
- не больше 10 неудачных входов с одного адреса за 5 минут, дальше 429 (панель доступна из интернета, простой перебор закрываем); успешный вход сбрасывает счётчик; - .env.example: SETTINGS_FILE пустой — локально настройки живут в памяти, в docker compose подставляет /data/settings.json по умолчанию.
This commit is contained in:
@@ -7,7 +7,7 @@ import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
import main
|
||||
from admin import AdminConfig, make_token, verify_token
|
||||
from admin import LOGIN_MAX_FAILURES, AdminConfig, make_token, verify_token
|
||||
from fixtures import fixture_xlsx, make_cache
|
||||
from schedule import ScheduleError
|
||||
from schedule.settings import SettingsStore
|
||||
@@ -84,6 +84,14 @@ def test_logout(client):
|
||||
assert client.get("/api/admin/state").status_code == 401
|
||||
|
||||
|
||||
def test_login_throttled_after_failures(client):
|
||||
for _ in range(LOGIN_MAX_FAILURES):
|
||||
assert do_login(client, password="неверный").status_code == 401
|
||||
# дальше — отказ, даже с верным паролем, пока не истекло окно
|
||||
assert do_login(client, password="неверный").status_code == 429
|
||||
assert do_login(client, password="s3cret").status_code == 429
|
||||
|
||||
|
||||
def test_token_helpers():
|
||||
token = make_token("admin", "s3cret", ttl=60)
|
||||
assert verify_token(token, "s3cret")
|
||||
|
||||
Reference in New Issue
Block a user