如何检查 Django 安全漏洞以及如何修复它们

Posted

技术标签:

【中文标题】如何检查 Django 安全漏洞以及如何修复它们【英文标题】:How to check Django security vulnerabilities and how to fix them 【发布时间】:2019-02-23 14:41:52 【问题描述】:

首先我使用 Django 2.1 + Python 3.6

我不得不承认 Django 是一个框架,它让开发人员的生活变得更加轻松,即使它是相对的。

现在我们已经编写了一个 Django 项目,完成了测试,部署了它的 web 应用程序;

问题:

没有特别涵盖的安全点有哪些? 姜戈?

我们能否提供一份与网站相关的漏洞清单 姜戈?

有哪些重要的安全测试可以确保用 Django 编写的应用程序的稳定性?

【问题讨论】:

见docs.djangoproject.com/en/2.1/topics/security。否则这个问题对于这个网站来说是题外话(太笼统了) 至于安全威胁:OWASP 有一些清单,在部署系统之前最好先看看:owasp.org/index.php/… pyscoop.com/security-in-the-django-application 【参考方案1】:

使用Observatory by Mozilla 站点扫描您站点的安全状态。该网站还包括第三方扫描仪,用于测试您网站的其他安全方面。

以下是给定站点的扫描结果示例:

最好的成绩是 A+(分数甚至可以超过 100%),但即使网站已通过基本部署检查表,也不要惊讶网站得分为 F(不及格)。

为了提高您的网站安全性,请确保您的 settings.py 中有这些设置:

CSRF_COOKIE_SECURE = True
CSRF_COOKIE_SAMESITE = 'Strict'
SESSION_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_SSL_REDIRECT = True
X_FRAME_OPTIONS = 'DENY'
SECURE_HSTS_SECONDS = 300  # set low, but when site is ready for deployment, set to at least 15768000 (6 months)
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True

然后使用SRI Hash Generator 确保您的所有脚本都从第三方站点安全加载。

最后,实施起来最具挑战性和最耗时的是内容安全策略 (CSP),尤其是在网站很大、包含大量第三方代码、大量内联脚本和样式分散的情况下在项目之上。为了使任务更容易,您可以安装 Mozilla's django-csp 并使用浏览器的控制台来跟踪代码中的安全违规行为。您还需要在settings.py 中填写以下设置:

CSP_DEFAULT_SRC = ("'none'",)
CSP_STYLE_SRC = ("'self'",)
CSP_SCRIPT_SRC = ("'self'",)
CSP_FONT_SRC = ("'self'",)
CSP_IMG_SRC = ("'self'",)

This site helps to explain about CSP and what to do with inline scripts.

或者,您可以安装 django-referrer-policy 来设置 Referrer-Policy 标头以增加安全性(和更高级别!)。

我自己也是初学者,以上所有内容均基于我的研究以及我为提高网站安全性所做的工作。

【讨论】:

SECURE_SSL_REDIRECT = True 导致移动浏览器出现Could not open the page, too many redirects 错误。【参考方案2】:

您可以执行的安全检查之一是Deployment checklist

运行

manage.py check --deploy

其他安全检查可以参考official docs

【讨论】:

以上是关于如何检查 Django 安全漏洞以及如何修复它们的主要内容,如果未能解决你的问题,请参考以下文章

安全测试手法之***测试网站信息讲解

如何把nginx安装成windows服务

将 Django 从 2.1 升级到 2.2.13 时如何修复 pyodbc 依赖错误?

Django 实时作业

thinkphp漏洞如何修复

如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)