赞
踩
您已经知道Web安全对于防止黑客和网络窃贼访问敏感信息很重要。 因此,在本文中,我们将检查Django安全漏洞以及如何修复它们。
首先,请通过以下命令检查您的安全漏洞:
manage.py check --deploy
您会看到一些描述,这些描述提供了有关Django Web应用程序漏洞的信息。 尝试搜索这些安全问题,并在生产前修复它们。
如果您已经部署了应用程序,则使用Mozilla站点的Observatory扫描站点的安全状态。 该网站还包括测试您网站其他安全方面的第三方扫描仪。
这是扫描的示例:
在Web应用程序中,基本上,Web表单从用户那里获取输入,并将其发送到服务器端组件以对其进行处理。 服务器端组件通常将服务公开为POST
, PUT
, DELETE
方法,以通过HTTP接受数据。 Django具有针对大多数CSRF威胁的内置安全性,只要您允许并在必要时使用它即可。
如文档中所述,除非绝对必要,否则在使用csrf_exempt装饰器标记视图时要非常小心。
如果某人(通过中间人攻击或xss)可以访问您的csrftoken cookie,则这是一个漏洞。
CSRF保护不能抵御中间人攻击,因此请结合使用HTTPS和HTTP Strict Transport Security (我们将在稍后的文章中进行讨论)。
设置HTTPS后,请在settings.py中添加以下行:
- CSRF_COOKIE_SECURE = True #to avoid transmitting the CSRF cookie over HTTP accidentally.
- SESSION_COOKIE_SECURE = True #to avoid transmitting the session cookie over HTTP accidentally.
跨站点脚本(XSS)允许攻击者将脚本注入网站或应用程序的内容。 当用户访问受感染的页面时,脚本将在受害者的浏览器中执行。 这使攻击者可以窃取Cookie,帐户信息等私人信息。
X-XSS-Protection:1; mode = block启用XSS过滤。 如果检测到攻击,浏览器将不呈现页面,而不会清除页面。
要在Django中启用它,请确保django.middleware.security.SecurityMiddleware存在于中间件列表中,并在settings.py中添加以下行:
- SECURE_BROWSER_XSS_FILTER = True
- SECURE_CONTENT_TYPE_NOSNIFF = True
最重要的事情之一就是确保Django管理的安全性。 在部署应用程序之前,必须将admin /路径更改为只有您知道的内容。 否则,某人可以轻松地在URL中键入/ admin并访问管理员登录页面。
- #urls.py
-
- from django.contrib import admin
- from django.urls import path
-
- urlpatterns = [
- path( 'admin/' , admin.site.urls) # change admin something different
您可以使用django-admin-honeypot创建伪造的admin登录页面,如果有人尝试尝试未经授权的访问,它将通知您。
在settings.py中添加以下行,以强制Django将所有非HTTPS请求重定向到HTTPS。
SECURE_SSL_REDIRECT = True
如果您的Django应用程序很大,包含许多第三方代码,并且在整个项目中散布着许多内联脚本和样式,则应将CSP添加到您的站点。
有关CSP的更多信息,请访问 内容安全策略简介
Django没有用于创建CSP标头的内置方法,因此您可以安装Mozilla的django-csp模块并使用浏览器的控制台来跟踪代码中的安全性违规。
安装django-csp后,将以下几行添加到settings.py。
- # Content Security Policy
- CSP_DEFAULT_SRC = ( "'none'" , )
- CSP_STYLE_SRC = ( "'self'" , )
- CSP_SCRIPT_SRC = ( "'self'" , )
- CSP_IMG_SRC = ( "'self'" , )
- CSP_FONT_SRC = ( "'self'" , )
因此,基本上,将不再允许所有内联脚本和样式。 所有脚本和样式都必须从资源中加载。 您可以在脚本和样式CSP标头中添加“ unsafe-inline”,但是这会否定整个策略。
从所有这些内联样式和脚本中清除代码非常重要。 但是,您的CSP政策中应允许使用某些外部资源,例如Google跟踪代码管理器或Google Analytics(分析)。 为了实现更新,您的代码是这样的:
- #Content Security Policy
- CSP_DEFAULT_SRC = ( "'none'" , )
- CSP_STYLE_SRC = ( "'self'" , "fonts.googleapis.com" , "'sha256-/3kWSXHts8LrwfemLzY9W0tOv5I4eLIhrf0pT8cU0WI='" )
- CSP_SCRIPT_SRC = ( "'self'" , "ajax.googleapis.com" , "www.googletagmanager.com" , "www.google-analytics.com" )
- CSP_IMG_SRC = ( "'self'" , "data:" , "www.googletagmanager.com" , "www.google-analytics.com" )
- CSP_FONT_SRC = ( "'self'" , "fonts.gstatic.com" )
- CSP_CONNECT_SRC = ( "'self'" , )
- CSP_OBJECT_SRC = ( "'none'" , )
- CSP_BASE_URI = ( "'none'" , )
- CSP_FRAME_ANCESTORS = ( "'none'" , )
- CSP_FORM_ACTION = ( "'self'" , )
- CSP_INCLUDE_NONCE_IN = ( 'script-src' ,)
有关更多信息,请参阅django-csp文档 。
请注意,此配置取决于您使用的外部资源,因此请先阅读文档,然后将更改应用于您的站点。
设置此政策后,如果您未正确提供HTTPS资源或证书过期,浏览器将在给定的时间内拒绝连接到您的网站。
将以下几行添加到您的settings.py中 :
- SECURE_HSTS_SECONDS = 86400 # 1 day
- SECURE_HSTS_INCLUDE_SUBDOMAINS = True
- SECURE_HSTS_PRELOAD = True
我建议使用wemake-django-template 。 这是一个专注于安全性和代码质量的新项目样板。 它具有列表中的所有内容。 甚至还有更多高级功能!
现在您的应用程序几乎是安全的。 另外,您可以使用nmap扫描开放端口,并尝试通过Google搜索如何修复这些开放端口。
如果您喜欢这篇文章,请访问Reverse Python以获取更多类似的有趣内容,并与您的朋友分享!
保持联系!
From: https://hackernoon.com/django-web-security-checklist-before-deployment-eco32gq
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。