Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
django-defender — Простое сверхбыстрое переиспользуемое приложение Django, которое блокирует попытки брутфорса входа. | Kitploit
Инструменты/GitHubGitHub/jazzband/django-defender
Оборонительные ИнструментыАтаки на ПаролиВеб-безопасностьАутентификация
GitHubjazzband/django-defender

django-defender

Простое сверхбыстрое переиспользуемое приложение Django, которое блокирует попытки брутфорса входа.

Репозиторий
1.1k144288 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

django-defender

.. image:: https://jazzband.co/static/img/badge.svg :target: https://jazzband.co/ :alt: Jazzband

.. image:: https://img.shields.io/pypi/pyversions/django-defender.svg :alt: Поддерживаемые версии Python :target: https://pypi.org/project/django-defender/

.. image:: https://img.shields.io/pypi/djversions/django-defender.svg :target: https://pypi.org/project/django-defender/ :alt: Поддерживаемые версии Django

.. image:: https://github.com/jazzband/django-defender/workflows/Test/badge.svg :target: https://github.com/jazzband/django-defender/actions :alt: GitHub Actions

.. image:: https://codecov.io/gh/jazzband/django-defender/branch/master/graph/badge.svg :target: https://codecov.io/gh/jazzband/django-defender :alt: Покрытие

.. image:: https://readthedocs.org/projects/django-defender/badge/?version=latest :alt: Статус документации :target: https://django-defender.readthedocs.io/en/latest/?badge=latest

Простое переиспользуемое Django-приложение, которое блокирует попытки подбора пароля (brute force). Цель — сделать его максимально быстрым, чтобы не замедлять процесс входа.

Мы будем использовать кеш, чтобы не обращаться к базе данных при каждой проверке попытки входа. Первая версия основана на Redis, но цель — сделать это настраиваемым, чтобы каждый мог использовать тот бэкенд, который лучше всего подходит для его задач.

Сайты, использующие django-defender

Если вы используете defender на своём сайте, отправьте PR, чтобы добавить его в список.

  • https://hub.docker.com
  • https://www.mycosbuilder.com

Документация

Документация доступна на Read the Docs:

https://django-defender.readthedocs.io

Возможности

  • Логирование всех попыток входа в базу данных

  • Поддержка обратных прокси с различными заголовками для IP-адресов

  • Ограничение скорости на основе

    • Имя пользователя
    • IP-адрес
  • Использование Redis для чёрного списка

  • Конфигурация

    • Redis сервер

      • Хост
      • Порт
      • База данных
      • Пароль
      • Префикс ключей
    • Время блокировки

    • Количество неверных попыток до блокировки

  • 95% покрытие кода

  • Полная документация

  • Возможность сохранять попытки входа в базу данных

  • Команда управления для очистки таблицы попыток входа

  • Страницы администрирования

    • Список заблокированных имён пользователей и IP-адресов
    • Список последних попыток входа
    • Возможность разблокировать пользователей
  • Легко адаптируется под кастомные методы аутентификации.

  • При блокировке имени пользователя или IP отправляются сигналы (signals)

Страницы администрирования


.. image:: https://cloud.githubusercontent.com/assets/261601/5950540/8895b570-a729-11e4-9dc3-6b00e46c8043.png :target: https://cloud.githubusercontent.com/assets/261601/5950540/8895b570-a729-11e4-9dc3-6b00e46c8043.png :alt: alt tag

.. image:: https://cloud.githubusercontent.com/assets/261601/5950541/88a35194-a729-11e4-981b-3a55b44ef9d5.png :target: https://cloud.githubusercontent.com/assets/261601/5950541/88a35194-a729-11e4-981b-3a55b44ef9d5.png :alt: alt tag

Требования

  • Python: 3.8, 3.9, 3.10, 3.11, 3.12, PyPy
  • Django: 3.2, 4.2, 5.0, 5.1, 5.2
  • Redis: 5.x, 6.x, 7.x

Установка

Скачайте код и запустите setup одним из следующих способов.

Чтобы установить готовую к использованию версию из PyPI:

.. code-block:: bash

pip install django-defender

Чтобы установить версию для разработки из исходного кода после загрузки:

.. code-block:: bash

python setup.py install

Чтобы установить версию для разработки из ветки master из репозитория GitHub:

.. code-block:: bash

pip install -e git+http://github.com/kencochran django-defender.git#egg=django_defender-dev

Прежде всего, необходимо добавить этот проект в список INSTALLED_APPS в settings.py

.. code-block:: python

INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', # ... 'defender', # ... ]

Затем установите middleware FailedLoginMiddleware

.. code-block:: python

MIDDLEWARE_CLASSES = [ 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'defender.middleware.FailedLoginMiddleware', ]

Если вы хотите управлять заблокированными пользователями через админку Django, добавьте следующее в ваш urls.py

.. code-block:: python

urlpatterns = [ path('admin/defender/', include('defender.urls')), # админка defender path('admin/', admin.site.urls), # обычная админка # ваши собственные шаблоны далее... ]

Миграции


Вам потребуется создать таблицы в базе данных, необходимые для работы.

.. code-block:: bash

python manage.py migrate defender

Команды управления


cleanup_django_defender

Если у вас сайт с высокой посещаемостью, таблица AccessAttempts будет заполняться довольно быстро. Если вам не нужно хранить данные для аудита, существует команда управления, которая поможет поддерживать её в чистоте.

Она будет проверять вашу настройку DEFENDER_ACCESS_ATTEMPT_EXPIRATION, чтобы определить, какие записи будут удалены. По умолчанию, если не указано, — 24 часа.

.. code-block:: bash

$ python manage.py cleanup_django_defender

Вы можете настроить это как ежедневную или еженедельную задачу cron, чтобы уменьшить размер таблицы.

.. code-block:: bash

запуск в 12:24 каждое утро.

24 0 * * * /usr/bin/python manage.py cleanup_django_defender >> /var/log/django_defender_cleanup.log

Долгосрочные цели

  • Подключаемые бэкенды, чтобы можно было использовать что-то кроме Redis
  • Отправка email пользователям при блокировке их учётной записи
  • Добавление белого списка для имён пользователей и IP, которые никогда не будут блокироваться (администраторы и т.д.)
  • Добавление постоянного чёрного списка для IP-адресов
  • Сканирование известных прокси-IP и не блокировка запросов, поступающих с них (повышение вероятности, что хороший IP не будет заблокирован)
  • Добавление команды управления для удаления старых (настраиваемых) попыток входа.

Производительность


Цель defender — сделать его максимально быстрым, чтобы он не замедлял процесс входа. Чтобы убедиться, что мы достигаем наших целей, нам нужен способ тестирования приложения. Лучший способ — сравнить скорость обычного входа в Django с defender и django-axes.

Обычный вход в Django — это наш базовый уровень, и мы ожидаем, что он будет самым быстрым из трёх методов, поскольку не выполняется никаких дополнительных проверок.

Вход с defender, скорее всего, будет медленнее, чем вход в Django, и, надеемся, быстрее, чем вход с django-axes. Цель — сделать разницу между обычным входом и defender как можно меньше.

Скорость входа с django-axes, вероятно, будет самой медленной из трёх, поскольку выполняется больше проверок и много запросов к базе данных.

Лучший способ определить скорость входа — провести нагрузочное тестирование приложения с каждой конфигурацией и сравнить время входа для каждого типа.

Нагрузочное тестирование


Чтобы убедиться, что мы охватываем все различные типы входов, в нашем нагрузочном тесте нам нужно больше одного теста.

#. Все успешные: Load-тест только с успешными входами.

#. Смешанные: часть успешных, часть неудачных: Load-тест с некоторыми успешными и некоторыми неудачными входами, чтобы увидеть, как неудачи влияют на производительность.

#. Все неудачные: Load-тест со всеми неудачными входами и посмотреть разницу в производительности.

Скачать инструмент