django
June 26, 2023

Задержка авторизации

Да, в Django можно реализовать задержку при авторизации для предотвращения атак brute force. Для этого вам нужно изменить поведение стандартной формы авторизации Django и добавить задержку перед отправкой ответа.

Одним из способов сделать это является использование middleware. Вот пример middleware, который добавляет задержку на 1 секунду для всех запросов POST на странице авторизации администратора:

pythonCopy Codefrom django.conf import settings
from django.http import HttpResponseForbidden
from django.urls import reverse

class AdminLoginRateLimitMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # проверяем, что это POST-запрос на странице авторизации администратора
        if request.method == 'POST' and request.path == reverse('admin:login'):
            # добавляем задержку на 1 секунду
            time.sleep(1)

        response = self.get_response(request)

        return response

Вы можете добавить этот middleware в список middleware в файле settings.py вашего проекта:

pythonCopy CodeMIDDLEWARE = [
    # ...
    'path.to.AdminLoginRateLimitMiddleware',
    # ...
]

Это middleware будет применять задержку только для запросов POST на странице авторизации администратора. Вы можете настроить его под свои нужды, например, добавив условие для проверки количества неудачных попыток авторизации.