首先介绍一些背景:我有一些相当简单的数据结构,它们作为json文件保存在磁盘上.这些json文件在不同语言和不同环境的应用程序(如Web前端和数据操作工具)之间共享.
对于我想要创建Python“POPO”(普通旧Python对象)的每个文件,以及每个项目的相应数据映射器类应该实现一些简单的CRUD行为(例如,save将序列化类并存储为json文件磁盘).
我认为一个简单的映射器(只知道基本类型)将起作用.但是,我担心安全问题.一些json文件将由Web前端生成,因此如果用户向我提供了一些糟糕的json,则可能存在安全风险.
最后,这是简单的映射代码(在How to convert JSON data into a Python object找到):
class User(object): def __init__(self,name,username): self.name = name self.username = username import json j = json.loads(your_json) u = User(**j)
您看到了哪些可能的安全问题?
注意:我是Python的新手.
编辑:感谢大家的评论.我发现我有一个json,我有2个数组,每个都有一个地图.不幸的是,当我得到更多这些时,这看起来变得很麻烦.
我正在将问题扩展到将json输入映射到recordtype.原始代码来自:https://stackoverflow.com/a/15882054/1708349.
因为我需要可变对象,所以我将其更改为使用namedlist而不是namedtuple:
import json from namedlist import namedlist data = '{"name": "John Smith","hometown": {"name": "New York","id": 123}}' # Parse JSON into an object with attributes corresponding to dict keys. x = json.loads(data,object_hook=lambda d: namedlist('X',d.keys())(*d.values())) print x.name,x.hometown.name,x.hometown.id
它还安全吗?