如何将a的str表示形式(dict如下面的字符串)转换为dict?
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
Run Code Online (Sandbox Code Playgroud)
我不喜欢用eval.我还能用什么?
这样做的主要原因是我写的一个同事课程,将所有输入转换为字符串.我没心情去修改他的课程来处理这个问题.
在这种情况下是否存在任何可能发生的安全漏洞:
eval(repr(unsanitized_user_input), {"__builtins__": None}, {"True":True, "False":False})
Run Code Online (Sandbox Code Playgroud)
unsanitized_user_inputstr对象在哪里.字符串是用户生成的,可能很讨厌.假设我们的Web框架没有让我们失望,那么它就是来自Python内置的一个真正的诚实的str实例.
如果这很危险,我们可以对输入做任何事情以使其安全吗?
我们当然不希望执行字符串中包含的任何东西.
也可以看看:
(我相信)对这个问题不重要的更大背景是我们有成千上万的这些:
repr([unsanitized_user_input_1,
unsanitized_user_input_2,
unsanitized_user_input_3,
unsanitized_user_input_4,
...])
Run Code Online (Sandbox Code Playgroud)
在某些情况下嵌套:
repr([[unsanitized_user_input_1,
unsanitized_user_input_2],
[unsanitized_user_input_3,
unsanitized_user_input_4],
...])
Run Code Online (Sandbox Code Playgroud)
它们本身转换为字符串repr(),放入持久存储,最后用eval读回内存.
Eval从持久存储中反序列化字符串比pickle和simplejson快得多.解释器是Python 2.5所以json和ast不可用.不允许使用C模块,不允许使用cPickle.
我有一个字符串,它就像:
"{'a': 1, 'b': 2, 'c': 3}"
Run Code Online (Sandbox Code Playgroud)
我想为这个字符串赋一个变量,并使变量成为一个字典.这听起来很容易,但我花了半个小时并没有想出来.怎么做?