Django ログイン10回連続で間違えたらアカウントをロックしたい

ケース

Djangoでログイン5回連続で間違えたらアカウントをロックしたい


  • django-axesをpipインストール
    pip install django-axes
  • setings.pyINSTALLED_APPSに'axes'を追加
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # 場所はどこでもOK!!
    'axes',
]
  • AUTHENTICATION_BACKENDSの最初に'axes.backends.AxesBackend'を追加
AUTHENTICATION_BACKENDS = [
    # 一番上に書く
    'axes.backends.AxesBackend',

    'django.contrib.auth.backends.ModelBackend',
]

  • MIDDLEWARE'axes.backends.AxesBackend'を追加
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    # 最後に書く
    'axes.middleware.AxesMiddleware',
]
  • settings.pyに設定を書く
AXES_FAILURE_LIMIT = 10   # 10回失敗したらロックがかかる
AXES_LOCKOUT_TEMPLATE = 'axes_locked.html'   # テンプレートを自作する場合
AXES_COOLOFF_TIME = 24   # 連続で失敗したら24時間アカウントがロック
  • ロック解除(adminサイトからも出来る)
    python manage.py axes_reset

豆知識

仮にログイン何回でも失敗出来たら
片っ端からひたすら試せば(何億通りとか)第3者にログインされる恐れがあります。
このように力技でログインを試みることを

「ブルートフォースアタック」

と言います。

ログイン失敗出来る回数に制限をかけるとセキュリティが高まります。

オフィシャルのドキュメントにもっと詳しく書かれています。
興味のある人は御覧ください!

https://django-axes.readthedocs.io/en/latest/1_requirements.html