
Une application Django réutilisable simple et super rapide qui bloque les tentatives de connexion par force brute.
.. 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: Versions Python prises en charge :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: Versions Django prises en charge
.. 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: Couverture
.. image:: https://readthedocs.org/projects/django-defender/badge/?version=latest :alt: Statut de la documentation :target: https://django-defender.readthedocs.io/en/latest/?badge=latest
Une simple application Django réutilisable qui empêche les tentatives de connexion par force brute. L'objectif est de la rendre aussi rapide que possible, afin de ne pas ralentir les tentatives de connexion.
Nous utiliserons un cache pour éviter d'interroger la base de données à chaque tentative de connexion. La première version sera basée sur Redis, mais l'objectif est de rendre cela configurable afin que les utilisateurs puissent utiliser le backend qui correspond le mieux à leurs besoins.
Si vous utilisez defender sur votre site, soumettez une PR pour l'ajouter à la liste.
La documentation est disponible sur Read the Docs :
https://django-defender.readthedocs.io
Enregistrer toutes les tentatives de connexion dans la base de données
Support des proxys inverses avec différents en-têtes pour les adresses IP
Limitation de débit basée sur
Utilisation de Redis pour la liste noire
Configuration
Serveur Redis
Durée du blocage
Nombre de tentatives incorrectes avant blocage
95 % de couverture de code
Documentation complète
Capacité de stocker les tentatives de connexion dans la base de données
Commande de gestion pour nettoyer la table des tentatives de connexion
Pages d'administration
Peut être facilement adapté à une méthode d'authentification personnalisée.
Des signaux sont envoyés lors du blocage d'un nom d'utilisateur ou d'une IP
Pages d'administration
.. 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
Téléchargez le code et exécutez l'installation de l'une des manières suivantes selon la méthode.
Pour installer la version prête pour la production depuis PyPI :
.. code-block:: bash
pip install django-defender
Pour installer la version de développement à partir du code source après téléchargement :
.. code-block:: bash
python setup.py install
Pour installer la version de développement de la branche master depuis le dépôt GitHub :
.. code-block:: bash
pip install -e git+http://github.com/kencochran django-defender.git#egg=django_defender-dev
Tout d'abord, vous devez ajouter ce projet à votre liste INSTALLED_APPS dans settings.py
.. code-block:: python
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', # ... 'defender', # ... ]
Ensuite, installez le middleware FailedLoginMiddleware
.. code-block:: python
MIDDLEWARE_CLASSES = [ 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'defender.middleware.FailedLoginMiddleware', ]
Si vous souhaitez gérer les utilisateurs bloqués via l'administration Django, ajoutez ce qui suit à votre urls.py
.. code-block:: python
urlpatterns = [ path('admin/defender/', include('defender.urls')), # defender admin path('admin/', admin.site.urls), # normal admin # your own patterns follow... ]
Migrations
Vous devrez créer les tables nécessaires dans votre base de données.
.. code-block:: bash
python manage.py migrate defender
Commandes de gestion
cleanup_django_defender
Si votre site web a beaucoup de trafic, la table AccessAttempts se remplira rapidement. Si vous n'avez pas besoin de conserver les données à des fins d'audit, une commande de gestion vous aide à la nettoyer.
Elle utilise le paramètre DEFENDER_ACCESS_ATTEMPT_EXPIRATION pour déterminer les enregistrements à supprimer. Par défaut, si non spécifié, la durée est de 24 heures.
.. code-block:: bash
$ python manage.py cleanup_django_defender
Vous pouvez configurer cette commande comme une tâche cron quotidienne ou hebdomadaire pour réduire la taille de la table.
.. code-block:: bash
24 0 * * * /usr/bin/python manage.py cleanup_django_defender >> /var/log/django_defender_cleanup.log
Performances
L'objectif de defender est d'être aussi rapide que possible afin de ne pas ralentir le processus de connexion. Pour vérifier que nos objectifs sont atteints, nous avons besoin d'un moyen de tester l'application. La meilleure façon est de comparer la rapidité d'une connexion Django normale avec defender et django-axes.
La connexion Django normale est notre base de référence, et nous nous attendons à ce qu'elle soit la plus rapide des trois méthodes, car il n'y a pas de vérifications supplémentaires.
La connexion avec defender sera probablement plus lente que la connexion Django, et nous espérons qu'elle sera plus rapide que la connexion avec django-axes. L'objectif est de minimiser la différence entre la connexion brute normale et defender.
La vitesse de connexion avec django-axes sera probablement la plus lente des trois car elle effectue plus de vérifications et beaucoup de requêtes en base de données.
La meilleure façon de déterminer la vitesse d'une connexion est d'effectuer un test de charge sur une application avec chaque configuration, et de comparer les temps de connexion pour chaque type.
Tests de charge