【问题标题】:Django JSON De-serialization SecurityDjango JSON 反序列化安全
【发布时间】:2012-03-25 02:53:17
【问题描述】:

Django 的 JSON 反序列化器是否存在任何已知的安全漏洞?关于 Python 反序列化协议,普遍的共识似乎是它们完全不安全,因此请避免解析不受信任的数据。

但是,我正在考虑一个分布式 Web 应用程序,其中不同的服务器交换模型记录,格式为 JSON。记录本身不包含敏感数据,但我担心被黑服务器通过发送恶意格式化的 JSON 来破坏另一台服务器的能力。这可能吗?

我通常会在面向公众的环境中看到 Django 的 JSON 序列化程序,因此我希望它能够针对此类事情进行强化,但我无法找到任何解决任何安全问题的文档。

【问题讨论】:

  • 您是否启用了 CSRF 保护?这应该对确保安全大有帮助。
  • 什么是“恶意格式化的 json”?
  • @Marcin,JSON 格式以利用解析器中的一些漏洞,允许在服务器上执行任意指令。
  • @Cerin 我知道什么是恶意格式。我要求您提供关于恶意格式化 JSON 的解释或示例。
  • @Marcin,很抱歉你没有理解我的问题,但没必要粗鲁。

标签: python django json security


【解决方案1】:

默认情况下,当使用simplejson,这是Django使用的默认反序列化器时,可以从JSON转换为Python对象的对象类型是有限的。不是这种情况的唯一方法是,如果您正在使用 loads()load() 方法或您自己的 JSONDecoder 对象的可选参数进行某种专门的解码。

所以,只要您使用默认解码,就非常安全。但是,如果您真的很担心,您应该在实际使用它之前验证加载的 JSON 数据。

【讨论】:

  • 好的,这是一个非常好的、过于笼统的建议:“验证加载的 JSON”——我用什么来验证它?常用表达?检查大小是否小于 X? Pickle 在设计上是不安全的,因为它可以调用任意对象的构造函数,而 JSON 是相当被动的。但是,历史知道这样的情况:kalzumeus.com/2013/01/31/…(这实际上是因为使用了过于通用的解析器:不是特定于 JSON 的)。如果不对这样的解析器进行非常重的模糊测试,我们就不能完全放心。
【解决方案2】:

我无法确定您认为 JSON 的哪些方面可能不安全(或安全)。

JSON 是一种基于文本的数据交换格式。它没有任何内置的安全性。 Django 带有一些函数来将查询集序列化和反序列化为 JSON。但这些不能是“恶意的”或“不安全的”——它们只是数据。

某些序列化协议(例如酸洗)可能不安全,因为它们可能包含代码,因此可能会被反序列化以运行会损害您系统的东西。序列化模型没有这个问题,因为它们不包含代码。

当然,如果您使用 JSON(例如)传递要删除的模型 ID 列表,那么恶意用户可能会包含您不想删除的整个 ID 负载。但这又不是 JSON 的错 - 由您来确保您的业务逻辑正确地确定允许用户删除或修改哪些元素。

【讨论】:

  • 但是如果解码器有缺陷那么evendatacan bemalicious
  • @Ignacio,没错。许多只读取数据的应用程序(例如图像查看器、音乐播放器等)偶尔会出现这种漏洞。我不想自动假设 Django 是豁免的。
猜你喜欢
  • 1970-01-01
  • 2012-12-08
  • 2011-06-30
  • 2011-09-17
  • 2020-11-23
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多