
Una aplicación reutilizable de Django simple y muy rápida que bloquea los intentos de inicio de sesión por fuerza bruta.
.. 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: Versiones de Python compatibles :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: Versiones de Django compatibles
.. image:: https://github.com/jazzband/django-defender/workflows/Test/badge.svg :target: https://github.com/jazzband/django-defender/actions :alt: Acciones de GitHub
.. image:: https://codecov.io/gh/jazzband/django-defender/branch/master/graph/badge.svg :target: https://codecov.io/gh/jazzband/django-defender :alt: Cobertura
.. image:: https://readthedocs.org/projects/django-defender/badge/?version=latest :alt: Estado de la documentación :target: https://django-defender.readthedocs.io/en/latest/?badge=latest
Una aplicación reutilizable simple de Django que bloquea a las personas que intentan ataques de fuerza bruta en el inicio de sesión. El objetivo es hacer esto lo más rápido posible, para no ralentizar los intentos de inicio de sesión.
Usaremos una caché para no tener que consultar la base de datos en cada intento de inicio de sesión. La primera versión se basará en Redis, pero el objetivo es hacerlo configurable para que las personas puedan usar el backend que mejor se adapte a sus necesidades.
Si estás usando defender en tu sitio, envía un PR para agregarlo a la lista.
La documentación está disponible en Read the Docs:
https://django-defender.readthedocs.io
Registrar todos los intentos de inicio de sesión en la base de datos
Soporte para proxies inversos con diferentes cabeceras para direcciones IP
Límite de velocidad basado en
Usar Redis para la lista negra
Configuración
Servidor Redis
Duración del bloqueo
Número de intentos incorrectos antes del bloqueo
95% de cobertura de código
Documentación completa
Capacidad de almacenar intentos de inicio de sesión en la base de datos
Comando de gestión para limpiar la tabla de la base de datos de intentos de inicio de sesión
Páginas de administración
Se puede adaptar fácilmente a métodos de autenticación personalizados.
Se envían señales al bloquear nombre de usuario o IP
Páginas de administración
.. 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
Descargue el código y ejecute setup de una de las siguientes maneras según el método.
Para instalar la versión lista para producción desde PyPI:
.. code-block:: bash
pip install django-defender
Para instalar la versión de desarrollo desde el código fuente después de descargarlo:
.. code-block:: bash
python setup.py install
Para instalar la versión de desarrollo de la rama master desde el repositorio de GitHub:
.. code-block:: bash
pip install -e git+http://github.com/kencochran django-defender.git#egg=django_defender-dev
En primer lugar, debe agregar este proyecto a su lista de INSTALLED_APPS en
settings.py
.. code-block:: python
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', # ... 'defender', # ... ]
A continuación, instale el 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 desea gestionar los usuarios bloqueados a través del administrador de Django, agregue lo
siguiente a su urls.py
.. code-block:: python
urlpatterns = [ path('admin/defender/', include('defender.urls')), # admin de defender path('admin/', admin.site.urls), # admin normal # sus propios patrones a continuación... ]
Migraciones
Necesitará crear tablas en su base de datos que sean necesarias para el funcionamiento.
.. code-block:: bash
python manage.py migrate defender
Comandos de gestión
cleanup_django_defender
Si tiene un sitio web con mucho tráfico, la tabla AccessAttempts se llenará rápidamente. Si no necesita conservar los datos para fines de auditoría, hay un comando de gestión para ayudarle a mantenerla limpia.
Observará su configuración DEFENDER_ACCESS_ATTEMPT_EXPIRATION para determinar
qué registros se eliminarán. El valor predeterminado, si no se especifica, es 24 horas.
.. code-block:: bash
$ python manage.py cleanup_django_defender
Puede configurar esto como una tarea cron diaria o semanal para mantener el tamaño de la tabla reducido.
.. code-block:: bash
24 0 * * * /usr/bin/python manage.py cleanup_django_defender >> /var/log/django_defender_cleanup.log
Rendimiento
El objetivo de defender es ser lo más rápido posible para no ralentizar el proceso de inicio de sesión. Para asegurarnos de que cumplimos nuestros objetivos, necesitamos una forma de probar la aplicación para asegurarnos de que vamos por buen camino. La mejor forma de hacer esto es comparar la rapidez de un inicio de sesión normal de Django con defender y django-axes.
El inicio de sesión normal de Django sería nuestra línea base, y esperamos que sea el más rápido de los 3 métodos, porque no se realizan comprobaciones adicionales.
El inicio de sesión con defender probablemente será más lento que el de Django, y esperamos que sea más rápido que el de django-axes. El objetivo es que haya la menor diferencia posible entre el inicio de sesión normal y defender.
La velocidad de inicio de sesión con django-axes probablemente será la más lenta de las tres, ya que realiza más comprobaciones y muchas consultas a la base de datos.
La mejor manera de determinar la velocidad de un inicio de sesión es realizar una prueba de carga contra una aplicación con cada configuración y comparar los tiempos de inicio de sesión para cada tipo.
Pruebas de carga