使用 OTP(2 因素身份验证)保护 Django 管理员登录
在为我们的应用程序添加安全性时,多因素身份验证是最基本的原则之一。在本教程中,我们将使用 OTP 方法添加多因素身份验证。这篇文章是 Django 博客 CMS 项目的延续。在这里查看 –使用 Django 构建博客 CMS(内容管理系统)
为 Django 项目设置 2 因素身份验证
我们将为我们的博客 CMS 安装 TOTP 包,这将为我们的管理员登录添加 OTP 安全性。首先安装django-otp包
pip install django-otp
并在我们安装的应用程序中添加'django_otp, django_otp.plugins.otp_totp ' ,并在我们的设置文件的中间件部分添加 django_otp.middleware.OTPMiddleware。
Python3
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'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'
]
Python3
from django_otp.admin import OTPAdminSite
admin.site.__class__ = OTPAdminSite
Python3
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_CONTENT_TYPE_NOSNIFF = True
CSRF_COOKIE_SECURE = True
现在跑,
# migrate our app
python3 manage.py migrate
创建 TOTP 设备 –
现在登录 django admin 创建一个 TOTP 设备。登录后可以看到
单击添加并填写详细信息以创建新的 TOTP 二维码
现在再次进入 totp 设备部分并打开二维码并使用您的 TOTP 应用程序(如 Authy、Google Authenticator 应用程序)进行扫描。
设置管理员 OTP 类 –
现在进入 gfgblog 中的 django urls.py 文件,而不是博客 urls.py 并添加行
蟒蛇3
from django_otp.admin import OTPAdminSite
admin.site.__class__ = OTPAdminSite
输出 -
现在注销并登录到 django admin 您每次需要登录到 django admin 时都会输入 OTP。
要遵循的一些基本安全原则
- 在生产中保持 Debug = False
- 限制允许托管到我们的服务器 IP、本地主机和主机名
- 保持密钥强大和安全
- 所有方式在生产中使用 HTTPS
- 如果由多个用户管理,请检查用户上传
- 确保您的数据库安全,不要在生产中使用 SQLite
- 尝试在生产中使用安全和内容标头,下面给出了一些标头,在 Settings.py 中添加这些标头
蟒蛇3
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_CONTENT_TYPE_NOSNIFF = True
CSRF_COOKIE_SECURE = True