目的:增加 Admin 的安全
1、安装:
pip install django_otp
pip install qrcode
2、配置 settings
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app.apps.AppConfig',
# 新增
'django_otp',
'django_otp.plugins.otp_totp',
]
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',
'django_otp.middleware.OTPMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
3、配置 urls.py
from django.contrib import admin
from django.urls import path
# 新增
from django_otp.admin import OTPAdminSite
admin.site.__class__ = OTPAdminSite
urlpatterns = [
path('admin/', admin.site.urls),
]
4、迁移生成数据表:
python manage.py makemigrations
python manage.py migrate
python manage.py migrate otp_totp
5、创建超级用户:
python manage.py createsuperuser
运行项目,访问 admin
平台,发现除了用户名和密码之外还多了一个 Token
验证。
注释上面有关 django-otp
的所有配置,重新访问 admin
平台,进入之后选择 TOTP device
,新增用户,点击 User
旁边的 搜索框,选择上面注册的 admin
用户,然后保存。
回到用户列表,发现多个了一个 qrcode
字段,点击就能显示出二维码,收集下载 app FreeOTP
,登陆 admin
平台时,用 app
扫描二维码,生成口令然后登陆。
注意:记得取消上面有个 django-otp 的注释!
其他方式增加 Admin 安全
1、修改 admin
的访问 URL
,使用比较难猜测的地址
urlpatterns += i18n_patterns(
url(r’^super-secret/’, admin.site.urls, name=’admin’),
)
2、配置 nginx
来限制访问 ip
:
location /admin/ { # 允许192.168.10.100访问此路由
allow 192.168.10.100; # 禁止所有其他IP访问
deny all;
...其他常规配置项}
参考文章
- 基于Django的双因子认证实现:
https://www.freebuf.com/articles/network/150071.html
- django-admin实现2FA双因子认证的方法:
https://jingyan.baidu.com/article/49ad8bce188ce71835d8fa7a.html
-
django-otp
:https://django-otp-official.readthedocs.io/en/latest/
- django项目:nginx怎么配置来限制ip对后台admin的访问?:
http://www.imooc.com/wenda/detail/516371
- 「译」5 种方法构建安全的 Django Admin:
https://zhuanlan.zhihu.com/p/28517753
网友评论