当前位置:   article > 正文

部署前清单:Django Web安全性

csp标头 创建

您已经知道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中添加以下行

  1. CSRF_COOKIE_SECURE = True #to avoid transmitting the CSRF cookie over HTTP accidentally.
  2. 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中添加以下行:

  1. SECURE_BROWSER_XSS_FILTER = True
  2. SECURE_CONTENT_TYPE_NOSNIFF = True

Django管理员安全性

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

  1. #urls.py
  2. from django.contrib import admin
  3. from django.urls import path
  4. urlpatterns = [
  5. path( 'admin/' , admin.site.urls) # change admin something different

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

SSL重定向

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

SECURE_SSL_REDIRECT = True

内容安全政策(CSP)

如果您的Django应用程序很大,包含许多第三方代码,并且在整个项目中散布着许多内联脚本和样式,则应将CSP添加到您的站点。

有关CSP的更多信息,请访问   内容安全策略简介

Django没有用于创建CSP标头的内置方法,因此您可以安装Mozilla的django-csp模块并使用浏览器的控制台来跟踪代码中的安全性违规。

安装django-csp后,将以下几行添加到settings.py。

  1. # Content Security Policy
  2. CSP_DEFAULT_SRC = ( "'none'" , )
  3. CSP_STYLE_SRC = ( "'self'" , )
  4. CSP_SCRIPT_SRC = ( "'self'" , )
  5. CSP_IMG_SRC = ( "'self'" , )
  6. CSP_FONT_SRC = ( "'self'" , )

因此,基本上,将不再允许所有内联脚本和样式。 所有脚本和样式都必须从资源中加载。 您可以在脚本和样式CSP标头中添加“ unsafe-inline”,但是这会否定整个策略。

从所有这些内联样式和脚本中清除代码非常重要。 但是,您的CSP政策中应允许使用某些外部资源,例如Google跟踪代码管理器或Google Analytics(分析)。 为了实现更新,您的代码是这样的:

  1. #Content Security Policy
  2. CSP_DEFAULT_SRC = ( "'none'" , )
  3. CSP_STYLE_SRC = ( "'self'" , "fonts.googleapis.com" , "'sha256-/3kWSXHts8LrwfemLzY9W0tOv5I4eLIhrf0pT8cU0WI='" )
  4. CSP_SCRIPT_SRC = ( "'self'" , "ajax.googleapis.com" , "www.googletagmanager.com" , "www.google-analytics.com" )
  5. CSP_IMG_SRC = ( "'self'" , "data:" , "www.googletagmanager.com" , "www.google-analytics.com" )
  6. CSP_FONT_SRC = ( "'self'" , "fonts.gstatic.com" )
  7. CSP_CONNECT_SRC = ( "'self'" , )
  8. CSP_OBJECT_SRC = ( "'none'" , )
  9. CSP_BASE_URI = ( "'none'" , )
  10. CSP_FRAME_ANCESTORS = ( "'none'" , )
  11. CSP_FORM_ACTION = ( "'self'" , )
  12. CSP_INCLUDE_NONCE_IN = ( 'script-src' ,)

有关更多信息,请参阅django-csp文档

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

HTTP严格传输安全

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

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

  1. SECURE_HSTS_SECONDS = 86400 # 1 day
  2. SECURE_HSTS_INCLUDE_SUBDOMAINS = True
  3. 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以获取更多类似的有趣内容,并与您的朋友分享!

保持联系!

From: https://hackernoon.com/django-web-security-checklist-before-deployment-eco32gq

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/746612
推荐阅读
相关标签
  

闽ICP备14008679号