
Eine einfache, superschnelle, wiederverwendbare Django-App, die Brute-Force-Anmeldeversuche blockiert
.. 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: Unterstützte Python-Versionen :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: Unterstützte Django-Versionen
.. 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: Coverage
.. image:: https://readthedocs.org/projects/django-defender/badge/?version=latest :alt: Dokumentationsstatus :target: https://django-defender.readthedocs.io/en/latest/?badge=latest
Eine einfache, wiederverwendbare Django-App, die Brute-Force-Loginversuche blockiert. Ziel ist es, dies so schnell wie möglich zu machen, damit die Loginversuche nicht verlangsamt werden.
Wir verwenden einen Cache, damit für jeden Loginversuch nicht die Datenbank abgefragt werden muss. Die erste Version basiert auf Redis, aber das Ziel ist es, dies konfigurierbar zu machen, sodass Benutzer das Backend verwenden können, das ihren Anforderungen am besten entspricht.
Wenn Sie defender auf Ihrer Website verwenden, reichen Sie einen PR ein, um zur Liste hinzugefügt zu werden.
Die Dokumentation ist auf Read the Docs verfügbar:
https://django-defender.readthedocs.io
Alle Anmeldeversuche in der Datenbank protokollieren
Unterstützung für Reverse Proxies mit verschiedenen Headern für IP-Adressen
Ratenbegrenzung basierend auf
Redis für die Blacklist verwenden
Konfiguration
Redis-Server
Sperrdauer
Anzahl fehlerhafter Versuche vor Sperrung
95% Codeabdeckung
Vollständige Dokumentation
Möglichkeit, Anmeldeversuche in der Datenbank zu speichern
Management-Befehl zum Bereinigen der Datenbanktabelle für Anmeldeversuche
Admin-Seiten
Kann leicht an eine benutzerdefinierte Authentifizierungsmethode angepasst werden.
Signale werden beim Sperren von Benutzername oder IP gesendet
Admin-Seiten
.. 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
Laden Sie den Code herunter und führen Sie die Installation auf eine der folgenden Arten aus, je nach Methode.
Um die produktionsreife Version von PyPI zu installieren:
.. code-block:: bash
pip install django-defender
Um die Entwicklungsversion aus dem Quellcode nach dem Herunterladen zu installieren:
.. code-block:: bash
python setup.py install
Um die Entwicklungsversion des Master-Branches aus dem GitHub-Repository zu installieren:
.. code-block:: bash
pip install -e git+http://github.com/kencochran django-defender.git#egg=django_defender-dev
Zuerst müssen Sie dieses Projekt zu Ihrer Liste der INSTALLED_APPS in
settings.py hinzufügen:
.. code-block:: python
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', # ... 'defender', # ... ]
Als nächstes installieren Sie die Middleware FailedLoginMiddleware:
.. code-block:: python
MIDDLEWARE_CLASSES = [ 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'defender.middleware.FailedLoginMiddleware', ]
Wenn Sie die gesperrten Benutzer über das Django-Admin verwalten möchten, fügen Sie
Folgendes zu Ihrer urls.py hinzu:
.. code-block:: python
urlpatterns = [ path('admin/defender/', include('defender.urls')), # defender admin path('admin/', admin.site.urls), # normal admin # your own patterns follow... ]
Migrationen
Sie müssen in Ihrer Datenbank die für den Betrieb notwendigen Tabellen erstellen:
.. code-block:: bash
python manage.py migrate defender
Management-Befehle
cleanup_django_defender
Wenn Sie eine Website mit viel Traffic haben, wird die Tabelle AccessAttempts ziemlich schnell voll. Wenn Sie die Daten nicht zu Prüfzwecken aufbewahren müssen, gibt es einen Management-Befehl, der Ihnen hilft, sie sauber zu halten.
Dieser Befehl prüft Ihre Einstellung DEFENDER_ACCESS_ATTEMPT_EXPIRATION, um zu bestimmen,
welche Datensätze gelöscht werden. Der Standardwert, falls nicht angegeben, ist 24 Stunden.
.. code-block:: bash
$ python manage.py cleanup_django_defender
Sie können dies als täglichen oder wöchentlichen Cron-Job einrichten, um die Tabellengröße gering zu halten:
.. code-block:: bash
24 0 * * * /usr/bin/python manage.py cleanup_django_defender >> /var/log/django_defender_cleanup.log
Leistung
Das Ziel von defender ist es, es so schnell wie möglich zu machen, damit es den Anmeldeprozess nicht verlangsamt. Um sicherzustellen, dass unsere Ziele erreicht werden, benötigen wir eine Möglichkeit, die Anwendung zu testen, um sicherzustellen, dass wir auf dem richtigen Weg sind. Der beste Weg, dies zu tun, ist zu vergleichen, wie schnell ein normaler Django-Login mit defender und django-axes ist.
Der normale Django-Login wäre unsere Basislinie, und wir erwarten, dass er die schnellste der drei Methoden ist, da keine zusätzlichen Überprüfungen stattfinden.
Der defender-Login wäre wahrscheinlich langsamer als der Django-Login und hoffentlich schneller als der django-axes-Login. Ziel ist es, den Unterschied zwischen dem normalen rohen Login und defender so gering wie möglich zu halten.
Die Geschwindigkeit des django-axes-Logins wird wahrscheinlich die langsamste der drei sein, da es mehr Überprüfungen durchführt und viele Datenbankabfragen macht.
Die beste Methode, um die Geschwindigkeit eines Logins zu bestimmen, ist ein Auslastungstest gegen eine Anwendung mit jedem Setup und der Vergleich der Login-Zeiten für jeden Typ.
Auslastungstests
Um sicherzustellen, dass wir alle verschiedenen Arten von Logins abdecken, müssen wir in unserem Auslastungstest mehr als einen Test haben.