django 部署_部署前清单:Django Web安全性

django 部署

您已经知道Web安全对于防止黑客和网络窃贼访问敏感信息很重要。 因此,在本文中,我们将检查Django安全漏洞以及如何修复它们。


部署清单

首先,请通过以下命令检查您的安全漏洞:

manage.py check --deploy

您会看到一些描述,这些描述提供了有关Django Web应用程序漏洞的信息。 尝试搜索这些安全问题,并在生产前修复它们。

Mozilla天文台

如果您已经部署了应用程序,则使用Mozilla站点的Observatory扫描站点的安全状态。 该网站还包括测试您网站其他安全方面的第三方扫描仪。

这是扫描的示例:

跨站点请求伪造(CSRF)保护

在Web应用程序中,基本上,Web表单从用户那里获取输入,并将其发送到服务器端组件以对其进行处理。 服务器端组件通常将服务公开为POSTPUTDELETE方法,以通过HTTP接受数据。 Django具有针对大多数CSRF威胁的内置安全性,只要您允许并在必要时使用它即可。

文档中所述,除非绝对必要,否则在使用csrf_exempt装饰器标记视图时要非常小心。

如果某人(通过中间人攻击或xss)可以访问您的csrftoken cookie,则这是一个漏洞。

CSRF保护不能抵御中间人攻击,因此请结合使用HTTPSHTTP 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)

跨站点脚本(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管理员安全性

最重要的事情之一就是确保Django管理的安全性。 在部署应用程序之前,必须将admin /路径更改为只有您知道的内容。 否则,某人可以在URL中轻松键入/ admin并访问管理员登录页面。

#urls.pyfrom django.contrib import admin
from django.urls import path

urlpatterns = [
    path( 'admin/' , admin.site.urls) # change admin something different

您可以使用django-admin-honeypot创建伪造的管理员登录页面,如果有人尝试尝试未经授权的访问,它将通知您。

SSL重定向

将以下行添加到settings.py中,以强制Django将所有非HTTPS请求重定向到HTTPS。

SECURE_SSL_REDIRECT =True

内容安全政策(CSP)

如果您的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标头中添加“不安全内联”,但是这会否定整个策略。

从所有这些内联样式和脚本中清除代码非常重要。 但是,您的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文档

请注意,此配置取决于您使用的外部资源,因此请先阅读文档,然后将更改应用于您的站点。

HTTP严格传输安全

设置此政策后,如果您未正确提供HTTPS资源或证书过期,浏览器将在给定的时间内拒绝连接到您的网站。

将以下几行添加到您的settings.py中

SECURE_HSTS_SECONDS =86400  # 1 day
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True

Nikita Sobolev的其他安全工具

  1. 使用Django轴或类似工具阻止暴力请求
  2. 使用Feature-Policy标头仅打开用户浏览器中真正需要的功能
  3. 使用Referrer-Policy标头可防止敏感信息泄漏到其他资源中
  4. 使用安全性来确保您的依赖项是安全的,并且不包含任何已知漏洞   wemake-python-styleguide检查您的源代码是否安全

我建议使用wemake-django-template 。 这是一个专注于安全性和代码质量的新项目样板。 它具有列表中的所有内容。 甚至还有更多高级功能!


任务完成!

现在,您的应用程序几乎是安全的。 另外,您可以使用nmap扫描开放端口,并尝试通过Google搜索如何修复这些开放端口。

如果您喜欢这篇文章,请访问Reverse Python以获取更多类似的有趣内容,并与您的朋友分享!

保持联系!

翻译自: https://hackernoon.com/django-web-security-checklist-before-deployment-eco32gq

django 部署

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值