在这种情况下是否可能发生任何安全漏洞利用:
eval(repr(unsanitized_user_input), {"__builtins__": None}, {"True":True, "False":False})
unsanitized_user_input
str对象在哪里。该字符串是用户生成的,可能令人讨厌。假设我们的网络框架没有让我们失败,那是一个来自Python内置函数的真正诚实的str实例。
如果这样做很危险,我们可以对输入进行任何操作以使其安全吗?
我们当然 不 希望执行字符串中包含的任何东西。
对于这个问题,我认为不是必不可少的更大范围是,我们有成千上万个这样的环境:
repr([unsanitized_user_input_1,
unsanitized_user_input_2,
unsanitized_user_input_3,
unsanitized_user_input_4,
...])
在某些情况下嵌套:
repr([[unsanitized_user_input_1,
unsanitized_user_input_2],
[unsanitized_user_input_3,
unsanitized_user_input_4],
...])
本身会使用转换为字符串repr()
,并放入永久存储中,最后使用eval读回内存。
Eval从持久性存储中反序列化字符串的速度比pickle和simplejson快得多。解释器是Python
2.5,因此json和ast不可用。不允许使用C模块,也不允许使用cPickle。
这确实是危险的,最安全的选择是ast.literal_eval
(请参阅标准库中的ast模块)。当然,您可以构建和更改一个ast
,以便在评估结果AST之前(当其取决于文字时)提供变量评估等。
start的可能利用是eval
从它可以动手的任何对象开始(True
在这里说),然后通过.__
class_转到其类型对象,依此类推,直到object
,然后获取其子类…基本上它可以到达任何对象类型并破坏破坏。我可以更具体一些,但我不希望在公共论坛上使用(该漏洞众所周知,但是考虑到仍然有很多人忽略它,将其透露给脚本小子可能会使情况变得更糟…只是避免eval
未经消毒的情况而已)用户输入并从此过上幸福的生活!-)。
从捆绑包反序列化LinkedHashMaps的正确方法是什么?完全可以做到吗?如果不是,我如何保持顺序而不在中间添加另一层来跟踪位置,这将涉及更改大量现有代码?
我想将json反序列化到类Foo: IBar有两个实现,但是当反序列化时,我总是想使用第一个实现。(理想情况下,这将使问题变得更容易,因为不需要运行时类型检查) 我相信我可以编写自定义反序列化程序,但我觉得一定有更简单的方法。 我找到了这个注释,它在没有列表的情况下非常有效。
问题内容: 在Apache Jackson和Jackson一起使用Apache Jersey进行JSON序列化时(在服务器和客户端上),在反序列化通用List时遇到问题。 我正在生成的JSON如下,“数据”中的所有3个类都实现“ CheckStatusDetail”: 产生此JSON的对象如下所示,我在客户端使用相同的类: 自从我将此注释添加到我的CheckStatusDetail接口后,就应用了
我试图序列化和反序列化类的列表(vb),显然里面只有派生类的实例。 我用修饰了list参数,获得如下输出: 但是当我反序列化它时,我一直说他不能反序列化抽象类。 http://james.newtonking.com/json/help/index.html?topic=html/SerializeTypeNameHandling.htm 删除注释行它可以工作!
我正在创建一个具有嵌套列表的API。Jackson似乎是一个创建对象的好工具,但我不太清楚如何嵌套列表,我想知道这是否可能。 我的对象看起来像这样。 我希望有一种方法可以将其映射到json,看起来像: 我们希望能够做到这一点,以便我们可以将属性添加到列表中。
当使用ObjectMapper将json字符串转换为实体时,我可以将其设置为通用的: 现在让我们假设我想读集合。我可以做到: 我想写一个与上述方法等效的方法,但用于集合。因为java中不能有泛型数组,所以这样的东西是行不通的: 这里有一个几乎可行的解决方案: 问题是它没有反序列化为的列表,而是。有没有什么方法可以更进一步,如下所示?