qwe*_*ty- 3 python eval python-3.4
我正在检查一个计算器示例,在所使用的示例中eval()通常是危险的,但这是该示例的一部分;
if button == "=":
#Check carefully how we using the 'dangerous' eval()
total = eval(str1,{"__builtins__":None},{})
str1 = str(total)
print (str1)
Run Code Online (Sandbox Code Playgroud)
我检查过但我不明白; 怎么eval(str1,{"__builtins__":None},{})没危险?这{"__builtins__":None},{}显然是关于这一部分,但我不明白.
注意:str1我们正在添加数字和smybols之类的字符串4+5.然后eval()处理它.
代码不是最安全的.builtins仅通过访问文字属性就可以相对容易地访问模块.
例如.
result = eval("""[klass for klass in ''.__class__.__base__.__subclasses__()
if klass.__name__ == "BuiltinImporter"][0].load_module("builtins")""",
{"__builtins__":None},{})
assert result is __builtins__
Run Code Online (Sandbox Code Playgroud)
细分:
''.__class__.__base__ 是简写 objectobject.__subclasses__()列出object解释器中的所有子类(包括导入机制使用的类)[klass for klass in ... if klass.__name__ == "BuiltinImporter"][0]- 选择BuiltinImporter课程.load_module("builtins")使用它BuiltinImporter来访问builtins模块 - 这是你试图限制访问的东西.| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |