【发布时间】:2015-07-05 22:53:28
【问题描述】:
首先了解一些背景知识:我有一些相当简单的数据结构,它们作为 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 新手。
编辑:感谢大家的cmets。我发现我有一个 json,其中有 2 个数组,每个数组都有一张地图。不幸的是,当我得到更多这些时,这开始看起来很麻烦。
我将问题扩展到将 json 输入映射到记录类型。原始代码来自这里:https://stackoverflow.com/a/15882054/1708349。 由于我需要可变对象,因此我将其更改为使用命名列表而不是命名元组:
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
还安全吗?
【问题讨论】:
-
我能想到的唯一问题是,由于加载了无效数据,某些东西会中断。
-
json 只能解析有限的类型,int、bool 等。不会执行任何操作,所以我看不到任何真正的安全风险
-
我仍然会对来自 Web 服务的输入进行一些健全性检查,尤其是当这些对象要访问数据库时。可能类似于将
name限制为 100 个可打印字符并且不允许使用一些标点符号(如分号)。看到这个帖子stackoverflow.com/questions/421046/…
标签: python json datamapper