首页 > 其他分享 >基于Django的安全性学习(下)

基于Django的安全性学习(下)

时间:2023-12-13 09:48:28浏览次数:28  
标签:基于 HTTP SECURE Django Host HTTPS 上传 安全性

基于Django的安全性学习(下)

SSL/HTTPS

  • 通过 HTTPS 部署网页是保障安全的最佳办法。没有它,恶意用户就可以在客户端和服务器之间嗅探验证资格或其他信息,在某些情况下,比如:主动网络攻击者,会修改发送中的数据。

  • 设置 SECURE_PROXY_SSL_HEADER,否则,将会导致 CSRF 漏洞,如果操作不正确,也是非常危险的。
    设置 SECURE_SSL_REDIRECT 为 True,这样 HTTP 的请求就会被重定向到 HTTPS。
    SECURE_PROXY_SSL_HEADER 下的警告。对于反向代理,设置主服务器去执行重定向到 HTTPS 会更简单安全。
    使用 'secure' cookies。
    如果浏览器使用默认的 HTTP 来实现初始连接,可能会导致已有的 cookies 泄露。应当将 CSRF_COOKIE_SECURE 和 CSRF_COOKIE_SECURE 设置为 True。这样浏览器就会仅用 HTTPS 连接来发送 cookies。这会使得 sessions 不能再通过 HTTP 工作,且 CSRF 防御机制将会阻止任何通过 HTTP 接收到的 POST 数据(当然把所有 HTTP 都弄成 HTTPS 是最好的)。
    使用 HTTP 严格传输安全 (HSTS)
    HSTS 是一个 HTTP 头部,它使得浏览器总是使用 HTTPS 来连接到某特定网页。结合转换 HTTP 到 HTTPS 的方法,一旦成功建立一个连接,就能保证之后的连接总受到 SSL 提供的额外安全保证。HSTS 要么在 Web 服务器上配置,要么通过 SECURE_HSTS_SECONDS, SECURE_HSTS_INCLUDE_SUBDOMAINS,以及 SECURE_HSTS_PRELOAD 来进行配置

Host 头部验证

  • 在某些情况下,Django 使用客户端提供的 Host 头部来构造 URLs。这些值虽被清理以阻止跨站脚本攻击,但伪造 Host 值还是可以用于跨站请求伪造,缓存毒化攻击,以及电子邮件中的有毒链接。
    因为即使看起来安全的服务器配置也容易受到假的 Host 头部信息的影响,Django 依靠定义在 django.http.HttpRequest.get_host() 方法中的 ALLOWED_HOSTS 来验证 Host 头部。

  • 这些验证仅通过 get_host() 来实现;如果代码直接从 request.META 得到 Host 头部,就绕过了这种安全保护机制。

Referrer 策略

  • 浏览器使用 Referer 头部来把关于用户是如何到达那里的信息发送到网站。通过设置 Referrer 策略,限制在哪些情况下设置 Referer 头部,可以保护您用户的隐私。

会话安全

类似于 CSRF 限制 要求一个被部署的网页应让不受信任的用户不能访问任何子域,django.contrib.sessions 也有限制。

用户上传内容

  • 可以从云服务或 CDN 提供静态文件服务来避免此类问题。
    如果网站接受文件上传,可以在服务器配置中将这些上传限制在合理大小范围中,以此来防御拒绝服务(DOS)攻击。在 Apache 中,使用 LimitRequestBody 指令可以很容易地实现这个设置。

  • 如果为自己的静态文件提供服务,确保像 Apache 的 mod_php 这种能把静态文件当作代码来执行的处理程序已经关闭。

  • 如果媒体文件没有遵循安全性最佳惯例,Django 的媒体上传处理会产生一些漏洞。特别的,如果一个 HTML 文件包含合法的 PNG 格式头部并附加一些恶意的 HTML,它是可以作为一个图片文件上传的。该文件将会通过 Django 用于 ImageField 图片处理(Pillow)库的验证。当此文件随后被展示给用户时,它可以被显示为 HTML

  • 在框架级别上没有防护技术方案可以安全地验证所有用户上传的文件内容,但是可以采取其他步骤来减轻这些攻击:

  • 通过一直为来自不同顶级域名或二级域名的用户提供上传内容可以防御一类的攻击。这可以防止被 same-origin policy 保护机制阻止的任何攻击,比如跨站脚本攻击。
    除此之外,应用可以选择定义一个列表来限制允许用户上传的文件的扩展名,并将 Web 服务器配置为仅为此类文件服务。

标签:基于,HTTP,SECURE,Django,Host,HTTPS,上传,安全性
From: https://www.cnblogs.com/whcl/p/17898342.html

相关文章

  • 基于Django的安全性学习(上)
    基于Django的安全性学习(上)防御跨站脚本攻击(XSS)发起XSS攻击的人可以向其他用户的浏览器诸如客户端脚本。这种攻击通常由存储在数据库中的恶意脚本实现,这些脚本会被检索出来并显示给其他用户;或者通过其他用户点击会令攻击者的JavaScript脚本在浏览器中执行的链接来实现。......
  • 高级计算机网络课程结课论文——《5G AKA协议安全性分析综述》
    AbstractInaneraofrapiddevelopmentofthenationaleconomy,variouselectronicproductsandmultimediatechnologieshaveemerged.Asaformofdigitalmedia,digitalvideohasbeenwidelyappliedinvariousfields,bringingjoyandconveniencetopeop......
  • 使用CEF(七)详解macOS下基于CEF的多进程应用程序CMake项目搭建
    由于macOS下的应用程序结构导致了CEF这样的多进程架构程序在项目结构、运行架构上有很多细节需要关注,这一块的内容比起Windows要复杂的多,所以本文将会聚焦macOS下基于CEF的多进程应用架构的环境配置,并逐一说明了CMake的相关用法和CEF应用配置细节。前言在进行搭建之前,我们首先必......
  • 基于.NET Core + Quartz.NET+ Vue + IView开箱即用的定时任务UI
    前言定时任务调度应该是平时业务开发中比较常见的需求,比如说微信文章定时发布、定时更新某一个业务状态、定时删除一些冗余数据等等。今天给大家推荐一个基于.NETCore+Quartz.NET +Vue+IView开箱即用的定时任务UI(不依赖数据库,只需在界面做简单配置):Quartz.NetUI。Quartz.......
  • Django学习(三) 之 模板中标签的使用
    写在前面最近看到稀土掘金在搞2023年终总结征文活动,一直想尝试投稿试试,周末我就花了近一下午时间写完初稿,然后周一、周二完成精读再改稿,感觉OK,昨晚凌晨第一时间在稀土掘金投稿。结果,又发生了同样的事情。同样的文章,在博客园上、公号上阅读量很OK,在稀土掘金上就上不来。这应......
  • 手持心电图机|基于MTK6761/MT6762平台的便携式心电图机方案
    心电图机是一种广泛应用于监测心脏状况的设备,它可以从多个角度观察心脏情况,及时反映患者的病情,以方便医生和患者进行了解。通过触摸屏可以轻松控制和录入信息。心电图机的报告提供多种语言选择,方便上传信息并实现无纸化报告。同时,该设备还支持远程诊断和远程医治。心电图机......
  • 基于5G智能网关的河道清洁机器人应用
    5G技术的普及也带动了机器人应用的快速发展,得益于5G通信技术的高带宽、低时延和高可靠性特性,显著提升了机器人的感知能力、控制精度以及远程操作能力,让机器人变得更加智能化、自主化。 5G智能网关赋能河道清洁机器人 河道清洁机器人就是一种具有代表性的5G赋能智能机器人应......
  • PMM 基于 Docker 部署
    1、Docker、Docker-Compose安装https://www.cnblogs.com/a120608yby/p/9883175.htmlhttps://www.cnblogs.com/a120608yby/p/14582853.html2、基于Docker-Compose部署PMM#vimdocker-compose.ymlversion:'3'services:pmm-server:image:percona/pmm-ser......
  • 基于机器学习的时间序列温度预测
    本次研究是使用GRU模型和GRU-Attention模型对长时间序列温度数据进行预测拟合,对于这两个模型有兴趣的可以去网上了解一下,首先是日数据预测,由于日数据存在缺失值需要对缺失值进行填补,在对存在缺失值的数据中我使用三次样方插值对数据进行处理,其代码如下:importpandasaspdimp......
  • Django 创建项目时找不到数据库sqlite3,提示no changes detected
    原因:PyCharm创建Django项目,找不到数据库sqlite3 解决:如果没有默认的db文件,则应在PyCharm终端中执行以下命令:pythonmanage.pymakemigrations:提示pythonmanage.pymigrate ......