Django 的安全性


当前第2页 返回上一页

因为即使看似安全的Web服务器配置也容易受到伪造的 Host标头的影响,所以Django会根据方法Host中的ALLOWED_HOSTS设置来 验证标头 django.http.HttpRequest.get_host()。

此验证仅通过get_host();如果您的代码Host直接从request.META您访问标头,则会绕过此安全保护。

有关更多详细信息,请参见完整ALLOWED_HOSTS文档。

警告:本文档的先前版本建议配置Web服务器,以确保它验证传入的HTTP Host标头。尽管仍然建议这样做,但是在许多常见的Web服务器中,似乎可以验证Host标头的配置实际上可能没有这样做。例如,即使将Apache配置为从具有该ServerName设置的非默认虚拟主机为Django站点提供服务,HTTP请求仍然有可能匹配该虚拟主机并提供??伪造的Host标头。因此,Django现在要求您进行ALLOWED_HOSTS显式设置,而不是依赖于Web服务器配置。

此外,如果您的配置需要Django,则Django要求您显式启用对X-Forwarded-Host标头的支持 (通过USE_X_FORWARDED_HOST设置)。

推荐人政策

浏览器使用Referer标头作为向用户发送有关用户到达那里的信息的方式。通过设置引荐来源网址策略,您可以帮助保护用户的隐私,并限制在哪种情况下设置 Referer标头。有关详细信息,请参见安全中间件参考的引荐来源网址策略部分。

会话安全

与CSRF的限制类似,它要求部署网站以使不受信任的用户无法访问任何子域,这 django.contrib.sessions也有限制。有关详细信息,请参见有关安全性的会话主题指南部分。

用户上传的内容

注意:考虑从云服务或CDN提供静态文件,以避免其中的某些问题。

  • 如果您的站点接受文件上传,则强烈建议您将Web服务器配置中的这些上传限制为合理的大小,以防止拒绝服务(DOS)攻击。在Apache中,可以使用LimitRequestBody指令轻松设置此值。
  • 如果您要提供自己的静态文件,请确保mod_php禁用诸如Apache的处理程序,该处理程序 将静态文件作为代码执行。您不希望用户能够通过上载和请求特制文件来执行任意代码。
  • 当以不遵循安全最佳实践的方式提供媒体时,Django的媒体上传处理会带来一些漏洞。具体来说,如果HTML文件包含有效的PNG标头和恶意HTML,则该HTML文件可以作为图像上传。该文件将通过Django用于ImageField图像处理的库的验证(枕头)。随后将该文件显示给用户时,根据您的Web服务器的类型和配置,它可能会显示为HTML。在框架级别没有可以安全验证所有用户上传文件内容的防弹技术解决方案,但是,您可以采取一些其他步骤来减轻这些攻击:通过始终为来自不同的顶级域或第二级域的用户上传的内容提供服务,可以防止一类攻击。这样可以防止任何由同源策略保护(例如跨站点脚本)阻止的漏洞利用。例如,如果您的网站在上运行example.com,您可能希望通过来提供上载的内容(MEDIA_URL设置)usercontent-example.com。这是不是足以从像一个子域提供内容usercontent.example.com。除此之外,应用程序可能会选择为用户上传的文件定义允许的文件扩展名白名单,并将Web服务器配置为仅提供此类文件。

其他安全主题

尽管Django提供了开箱即用的良好安全保护,但是正确部署应用程序并利用Web服务器,操作系统和其他组件的安全保护仍然很重要。

  • 确保您的Python代码在Web服务器根目录之外。这将确保您的Python代码不会意外地用作纯文本(或意外地执行)。
  • 注意任何用户上传的文件。
  • Django不会限制对用户进行身份验证的请求。为了防止对身份验证系统的暴力攻击,您可以考虑部署Django插件或Web服务器模块来限制这些请求。
  • 保守SECRET_KEY秘密
  • 最好使用防火墙限制缓存系统和数据库的可访问性。
  • 查看开放式Web应用程序安全项目(OWASP)的前10个列表,该列表确定了Web应用程序中的一些常见漏洞。尽管Django拥有解决某些问题的工具,但在项目设计中必须考虑其他问题。
  • Mozilla讨论了有关Web安全的各种主题。他们的页面还包含适用于任何系统的安全性原则。

详情参考: https://docs.djangoproject.com/en/3.0/



标签:Django

返回前面的内容

相关阅读 >>

Django 教程介绍

Django 模板

Django 简介

Django 使用表单模板

基于类的视图简介

Django 模型

使用wsgi进行部署

使用基于类的视图进行表单处理

将mixins与基于类的视图一起使用

部署清单

更多相关阅读请进入《Django》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...