
एक सरल, अत्यधिक तेज़ Django पुन: प्रयोज्य ऐप जो लोगों को लॉगिन प्रयासों को ब्रूट फोर्स करने से रोकता है।
.. 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: Supported Python versions :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: Supported Django versions
.. 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: Documentation Status :target: https://django-defender.readthedocs.io/en/latest/?badge=latest
एक सरल Django पुन: प्रयोज्य ऐप जो लोगों को ब्रूट-फोर्सिंग लॉगिन प्रयासों से रोकता है। लक्ष्य इसे यथासंभव तेज़ बनाना है, ताकि लॉगिन प्रयासों को धीमा न किया जाए।
हम एक कैश का उपयोग करेंगे ताकि प्रत्येक लॉगिन प्रयास पर डेटाबेस को हिट न करना पड़े। पहला संस्करण Redis पर आधारित होगा, लेकिन लक्ष्य इसे कॉन्फ़िगरेबल बनाना है ताकि लोग अपनी आवश्यकताओं के अनुसार कोई भी बैकएंड उपयोग कर सकें।
यदि आप अपनी साइट पर defender का उपयोग कर रहे हैं, तो सूची में जोड़ने के लिए PR सबमिट करें।
दस्तावेज़ीकरण Read the Docs पर उपलब्ध है:
https://django-defender.readthedocs.io
सभी लॉगिन प्रयासों को डेटाबेस में लॉग करें
IP पतों के लिए विभिन्न हेडर वाले रिवर्स प्रॉक्सी के लिए समर्थन
आधारित दर सीमा
ब्लैकलिस्ट के लिए Redis का उपयोग करें
कॉन्फ़िगरेशन
Redis सर्वर
ब्लॉक अवधि
ब्लॉक से पहले गलत प्रयासों की संख्या
95% कोड कवरेज
पूर्ण दस्तावेज़ीकरण
लॉगिन प्रयासों को डेटाबेस में संग्रहीत करने की क्षमता
लॉगिन प्रयास डेटाबेस तालिका को साफ करने के लिए प्रबंधन कमांड
प्रशासन पृष्ठ
कस्टम प्रमाणीकरण विधि में आसानी से अनुकूलित किया जा सकता है।
उपयोगकर्ता नाम या IP को ब्लॉक करने पर सिग्नल भेजे जाते हैं
प्रशासन पृष्ठ
.. 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
कोड डाउनलोड करें, और विधि के अनुसार निम्नलिखित में से किसी एक तरीके से सेटअप चलाएं।
PyPI से उत्पादन-तैयार संस्करण स्थापित करने के लिए:
.. code-block:: bash
pip install django-defender
स्रोत कोड से डाउनलोड करने के बाद विकास संस्करण स्थापित करने के लिए:
.. code-block:: bash
python setup.py install
GitHub रिपॉजिटरी से मास्टर शाखा विकास संस्करण स्थापित करने के लिए:
.. code-block:: bash
pip install -e git+http://github.com/kencochran django-defender.git#egg=django_defender-dev
सबसे पहले, आपको इस प्रोजेक्ट को अपनी settings.py में INSTALLED_APPS की सूची में जोड़ना होगा।
.. code-block:: python
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', # ... 'defender', # ... ]
इसके बाद, 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 admin path('admin/', admin.site.urls), # normal admin # your own patterns follow... ]
माइग्रेशन
आपको अपने डेटाबेस में संचालन के लिए आवश्यक तालिकाएँ बनानी होंगी।
.. 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
आप इसे तालिका का आकार कम रखने के लिए दैनिक या साप्ताहिक क्रॉन जॉब के रूप में सेट कर सकते हैं।
.. code-block:: bash
24 0 * * * /usr/bin/python manage.py cleanup_django_defender >> /var/log/django_defender_cleanup.log
प्रदर्शन
defender का लक्ष्य इसे यथासंभव तेज़ बनाना है ताकि लॉगिन प्रक्रिया धीमी न हो। यह सुनिश्चित करने के लिए कि हमारे लक्ष्य पूरे हो रहे हैं, हमें एप्लिकेशन का परीक्षण करने का एक तरीका चाहिए ताकि यह सुनिश्चित हो सके कि हम सही रास्ते पर हैं। ऐसा करने का सबसे अच्छा तरीका यह तुलना करना है कि सामान्य Django लॉगिन defender और django-axes के साथ कितनी तेज़ी से होता है।
सामान्य Django लॉगिन हमारा आधार रेखा होगी, और हम उम्मीद करते हैं कि यह तीनों विधियों में सबसे तेज़ होगी, क्योंकि कोई अतिरिक्त जाँच नहीं हो रही है।
defender लॉगिन संभवतः Django लॉगिन से धीमा होगा, और उम्मीद है कि django-axes लॉगिन से तेज़ होगा। लक्ष्य सामान्य रॉ लॉगिन और defender के बीच जितना संभव हो उतना कम अंतर रखना है।
django-axes लॉगिन गति संभवतः तीनों में सबसे धीमी होगी क्योंकि यह अधिक जाँच करता है और बहुत सारे डेटाबेस क्वेरी करता है।
लॉगिन की गति निर्धारित करने का सबसे अच्छा तरीका प्रत्येक सेटअप के साथ एक एप्लिकेशन के विरुद्ध लोड परीक्षण करना और प्रत्येक प्रकार के लॉगिन समय की तुलना करना है।
लोड परीक्षण
यह सुनिश्चित करने के लिए कि हम सभी विभिन्न प्रकार के लॉगिन को कवर करते हैं, हमारे लोड परीक्षण में एक से अधिक परीक्षण होने चाहिए।
#. सभी सफल: हम केवल सफल लॉगिन के साथ एक लोड परीक्षण करेंगे।
#. मिश्रित: कुछ सफल कुछ असफल: हम कुछ सफल लॉगिन और कुछ असफलताओं के साथ लोड परीक्षण करेंगे ताकि देख सकें कि असफलता प्रदर्शन को कैसे प्रभावित करती है।
#. सभी असफलताएँ: हम सभी असफल लॉगिन के साथ लोड परीक्षण करेंगे और प्रदर्शन में अंतर देखेंगे।
हमें एक नमूना एप्लिकेशन की आवश्यकता होगी जिसका उपयोग हम लोड परीक्षण के लिए कर सकें, जिसमें एकमात्र अंतर कॉन्फ़िगरेशन है जहाँ हम defender, axes, या उनमें से कोई भी लोड करते हैं।