Django アカウントロック機能短時間で実装するライブラリ『 django-axes』

Djangoのブルートフォースアタック対策

アプリを作る時、特にWebアプリのようにインターネットでだれでもアクセスできる場合に、セキュリティ上大切な対策があります。

何かわかりますか?

それはIDとパスをたくさん使って総当たりする、『ブルートフォースアタック(総当たり攻撃)』への対策です。要するに、IDやパスワードを無作為に作成して、ログインを試みる攻撃です。

対策として、何回間違えたら、接続元IPアドレスやIDなどによって、「5分間ログイン試行停止」

「アカウントロックする」

いう機能が必要です。

Djangoでは、django-axesというライブラリがあり、MITライセンスで利用可能という、とても嬉しいライブラリーです。

目次

django-axesをインストールして設定する

ライブラリを使うと本当に実装するのに時間が短縮できるので、開発者もユーザー側もハッピーになるので利用しないなんてことは選択肢にありません👍

インストール

それでは、さっそくインストールして実装していきましょう😀

pip install django-axes

たっとこれだけでインストールは完了です。

次は設定をしていきます。

settings.py のINSTALLED_AAPSに追加

設定ファイルの、インストールアプリに追加します。

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

'axes' # django-axesの設定 #追加
]

settings.py のAUTHENTICATION_BACKENDSに追加

設定ファイルのAUTHENTICATION_BACKENDSに、axes.bakends.AxesModeBackendを先頭に追加する。

AUTHENTICATION_BACKENDS = [
'axes.backends.AxesBackend', # 先頭に追加必要
'django.contrib.auth.backends.ModelBackend',
]

settings.py のMIDDLEWAREに追加

設定ファイルのMIDDLEWAREに、’axes.middleware.AxesMiddleware’を追加する

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'axes.middleware.AxesMiddleware', # 追加
]

settings.py にaxesの項目設定追加

設定ファイルに、各使用する項目を追加します。
様々な設定ができますので、リンク先を参照して必要な設定を追加してください。

Herokuで本番環境を作る場合、ヘッダーを変更する必要があります。

# アクセス制限
# パスワード試行回数
AXES_FAILURE_LIMIT = 3
# 失敗履歴のクリア時間
AXES_COOLOFF_TIME = 5
# ユーザーが失敗したIPアドレスで制限
AXES_LOCK_OUT_BY_COMBINATION_USER_AND_IP = True
# ユーザーに対するロック
AXES_ONLY_USER_FAILURES = True
# ログイン成功での試行履歴削除
AXES_RESET_ON_SUCCESS = True
# usernameとして指定
AXES_USERNAME_CALLABLE = "utils.axes.get_username"
# Heroku用
AXES_META_PRECEDENCE_ORDER = (
'HTTP_X_FORWARDED_FOR',
)

マイグレ実施

これで準備ができましたので、マイグレをするとaxes用のテーブルが作成されます。

python manage.py migrate

管理サイトに入ると管理するためのテーブルが作成されています。

Django-axes-table

認証が失敗すると、Access failures に書き込まれていいきます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

「@縁紡ぐ」にご訪問頂きありがとうございます。
業務改善やIT化、システム開発・プロジェクトチーム運用支援を行っています。
お気軽にご相談ください。

コメント

コメントする

CAPTCHA


目次
閉じる