首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的安全通用序列化

Python中的安全通用序列化
EN

Stack Overflow用户
提问于 2017-08-21 13:01:32
回答 2查看 1.4K关注 0票数 4

我想(反)将Python中的简单对象序列化为人类可读的(例如JSON)格式。数据可能来自不受信任的源。我真的很喜欢锈蚀图书馆的工作方式:

代码语言:javascript
运行
复制
#[derive(Serialize, Deserialize, Debug)]
struct Point {
    x: i32,
    y: i32,
}

fn main() {
    let point = Point { x: 1, y: 2 };

    // Convert the Point to a JSON string.
    let serialized = serde_json::to_string(&point).unwrap();

    // Prints serialized = {"x":1,"y":2}
    println!("serialized = {}", serialized);

    // Convert the JSON string back to a Point.
    let deserialized: Point = serde_json::from_str(&serialized).unwrap();

    // Prints deserialized = Point { x: 1, y: 2 }
    println!("deserialized = {:?}", deserialized);
}

我想在Python中实现这样的目标。由于Python不是静态类型的,所以我希望语法如下所示:

代码语言:javascript
运行
复制
deserialized = library.loads(data_str, ClassName)

其中ClassName是预期的类。

  1. jsonpickle坏了,坏了,坏了。它绝对不进行任何消毒,它的使用会导致任意代码执行。
  2. 有序列化库:limamarshmallowkim,但它们都需要手动定义序列化方案。实际上,这会导致代码重复,这是很糟糕的。

在Python中,有什么可以用于简单的、通用的、安全的序列化吗?

编辑:以前隐含的其他要求

  1. 句柄嵌套序列化(serde可以这样做:https://gist.github.com/63bcd00691b4bedee781c49435d0d729)
  2. 处理内置类型,即能够序列化和反序列化内置json模块能够实现的所有内容,而无需对内置类型进行特殊处理。
EN

回答 2

Stack Overflow用户

发布于 2017-08-22 08:18:16

因为Python不需要类型注释,所以任何这样的库都需要

  1. 使用自己的类
  2. 利用类型注释。

后者将是一个完美的解决方案,但我还没有找到任何这样的图书馆。

不过,我找到了一个模块,它只需要将一个类定义为模型:https://github.com/dimagi/jsonobject

用法示例:

代码语言:javascript
运行
复制
import jsonobject


class Node(jsonobject.JsonObject):
    id = jsonobject.IntegerProperty(required=True)
    name = jsonobject.StringProperty(required=True)


class Transaction(jsonobject.JsonObject):
    provider = jsonobject.ObjectProperty(Node)
    requestor = jsonobject.ObjectProperty(Node)


req = Node(id=42, name="REQ")
prov = Node(id=24, name="PROV")

tx = Transaction(provider=prov, requestor=req)
js = tx.to_json()
tx2 = Transaction(js)
print(tx)
print(tx2)
票数 0
EN

Stack Overflow用户

发布于 2020-01-28 21:00:46

对于Python,我首先检查输入的大小。唯一的安全风险是通过发送一个巨大的文件来运行json.load()。

一旦解析了JSON,请考虑运行模式验证器(如PyKwalify )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45797830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档