django admin
将确保应用程序安全的责任转移到QA测试人员或信息安全办公室,这很诱人,但是安全是每个人的责任。 Django Admin是我们最喜欢的Django功能之一,但是除非正确锁定,否则它会提供被利用的机会。 为了保护用户免遭泄露数据的侵害,这里有10条技巧,可以使Django Admin更安全。
1.使用SSL
在HTTPS之后部署您的站点。 如果您不使用HTTPS,则当您在咖啡店,机场或其他公共场所时,有人可能会窥探您(或您的用户)密码。 在Django docs中阅读有关启用SSL的更多信息以及可能需要执行的其他步骤。
2.更改网址
将默认的管理URL从/admin/
更改为其他名称。 说明在Django文档中 ,但总而言之,将URL conf中的admin/
替换为其他内容:
urlpatterns =
[
path
(
'my-special-admin-login/' , admin.site.urls
) ,
]
为了获得更高的安全性,请完全将管理员托管在其他域中。 如果您需要更高的安全性,请在VPN或不公开的地方为管理员服务。
3.使用“ django-admin-honeypot”
您旧的/admin/
URL上的django-admin-honeypot可以捕获黑客入侵您网站的尝试。
django-admin-honeypot
生成伪造的admin登录屏幕,并在有人尝试登录到您的旧/admin/
URL时向您的站点管理员发送电子邮件。
django-admin-honeypot
生成的电子邮件将包含攻击者的IP地址,因此,为了提高安全性,如果您发现同一IP地址重复登录尝试,可以阻止该地址使用您的站点。
4.需要更强的密码
您的大多数用户会选择错误的密码。 启用密码验证可以确保您的用户选择更强的密码,这反过来又可以提高其数据以及他们在管理员中可以访问的数据的安全性。 通过启用密码验证,要求使用强密码。 Django文档对如何启用Django随附的密码验证器进行了很好的介绍。 查看第三方密码验证器,例如django-zxcvbn-password,以使您的用户密码更加安全。 Scot Hacker python-zxcvbn
了一篇出色的文章,介绍了如何创建强密码并在Python项目中实现python-zxcvbn
库。
5.使用两因素身份验证
两要素身份验证(2FA)是指您需要密码以及用于身份验证网站用户的其他内容时。 您可能熟悉需要密码的应用程序,然后在允许您登录之前向您发送第二个登录代码。 这些应用程序正在使用2FA。
您可以通过三种方式在网站上启用2FA:
- 带短信的2FA,您可以在其中输入登录代码。 这比只要求输入密码要好,但是SMS消息却很容易被拦截。
- 2FA,带有Google Authenticator之类的应用,可为您注册到的任何服务生成唯一的登录代码。 要设置这些应用程序,用户将需要扫描您网站上的QR码,才能使用他们的应用程序注册您的网站。 然后,该应用程序将生成登录代码,他们可以使用该登录代码登录到您的网站。
- 带有YubiKey的2FA是在您的站点上启用2FA的最安全方法。 此方法要求您的用户拥有一个物理设备YubiKey,并在尝试登录时将其插入USB端口。
django-two-factor-auth库可以帮助您启用上述任何2FA方法。
6.使用最新版本的Django
始终使用最新的Django次要版本来保持安全更新和错误修正。 在撰写本文时,即Django 2.0.1。 您可以尽快升级到最新的长期发行版(LTS),但一定要确保在项目脱离支持之前对其进行升级(请参见下载上的受支持版本)。
7.切勿在生产中运行`DEBUG`
当您在设置文件中将DEBUG
设置为True
时,将显示错误并显示完整的追溯,这些追溯可能包含您不希望最终用户看到的信息。 您可能还具有仅在“调试”模式下启用的其他设置或方法,这些设置或方法可能会对用户及其数据造成风险。
为避免这种情况,请对本地开发和生产部署使用不同的设置文件。 查看Vitor Freitas 关于使用多个设置文件的精彩介绍 。
8.记住你的环境
管理员应明确说明您所处的环境,以防止用户意外删除生产数据。 您可以使用django-admin-env-notice库轻松完成此操作,该库将在您的Admin站点的顶部放置一个带有颜色编码的横幅 。
9.检查错误
这不是Django Admin特有的,但是保护您的应用程序仍然是一个好习惯。 使用python manage.py check --deploy
查找安全错误。 如果在本地运行项目时运行此命令,则可能会看到一些与生产无关的警告。 例如,您的DEBUG
设置可能是True
,但是您已经在使用单独的设置文件来进行生产了,对吗?
该命令的输出如下所示:
?:
( security.W002
) You
do not have
'django.middleware.clickjacking.XFrameOptionsMiddleware'
in your MIDDLEWARE, so your pages will not be served with an
'x-frame-options' header. Unless there is a good reason
for your site to be served
in a frame, you should consider enabling this header to
help prevent clickjacking attacks.
?:
( security.W012
) SESSION_COOKIE_SECURE is not
set to True. Using a secure-only session cookie makes it
more difficult
for network traffic sniffers to hijack user sessions.
?:
( security.W016
) You have
'django.middleware.csrf.CsrfViewMiddleware'
in your MIDDLEWARE, but you have not
set CSRF_COOKIE_SECURE to True. Using a secure-only CSRF cookie makes it
more difficult
for network traffic sniffers to steal the CSRF token.
System check identified
3 issues
(
0 silenced
) .
请注意,每个警告均包含有关您的风险以及应更改的内容的说明。 有关此检查的更多信息,请参见Django文档 。
10.进行检查
这是不是专门针对管理员的另一个技巧,但仍然是一个好习惯。 部署到暂存站点后,可通过Sasha的Pony Checkup运行您的网站。 该站点将为您提供安全评分,并提供一些整洁的措施来改进该评分。 它将对您的站点进行上面列出的某些测试,并建议其他保护站点免受特定漏洞和攻击类型的方法。
进一步阅读
是否需要有关Django安全性的更多信息?
- Haki Benita撰写了5种使Django Admin更安全的方法 。
- Kelsey Gilmore-Innis 为Python开发人员编制了一份安全资源列表 。
翻译自: https://opensource.com/article/18/1/10-tips-making-django-admin-more-secure
django admin